Hibernate是实现了JPA定义。在使用注解的时候,会有JPA的Table,也有Hibernate的Table,两者是什么关系呢?是接口与实现的关系吗?还是父类与子类的关系?

解决方案 »

  1.   

    这2个是相互独立的,以hibernate3.5.5为例,如果你要使用hibernate自带的table注解,引入
    import org.hibernate.annotations.Table;这个类就可以了,这个类在hibernate3.jar中而如果你要使用hibernate jpa的table注解,引入import javax.persistence.Table;这个类,
    这个类位于hibernate-jpa-2.0-api-1.0.0.Final.jar中
      

  2.   

    Hibernate不是实现了JPA的规范么?那对于这里的注解来讲有什么影响?有的资料上说,要用jpa的Table,如果用Hibernate的Table可能会出现莫名其妙的错误。
      

  3.   

    可能你理解有点问题,hibernate是实现了JPA规范,在你使用hibernate框架的时候,你引入了hibernate3或者4这个核心包,hibernate-jpa-2.0-api-1.0.0.Final.jar这个包的作用是hibernate jpa实现。注解的选择,建议你采用hibernate jpa,为什么呢,如果你要把你的代码移植到其他框架,比如EJB中,那么你可以不修改任何一句代码,就能实现很好的移植。至于你说的hibernate 的table可能会出现莫名其妙的错误,这个我不清楚,我基本都采用hibernate jpa。
      

  4.   

    还有,就是JPA仅仅是规范,而自身没有统一的Jar包么?比如说JDBC,虽然有各个数据库厂商的实现,但是Java是有Connection等接口的。
      

  5.   

    我记得hibernate3.5以前的版本使用注解使用hibernate-annotations.jar以及ejb-persistence.jar。其实这里的ejb-persistence.jar和前面提到的hibernate-jpa-2.0-api-1.0.0.Final.jar功能一样,实现持久化功能。但hibernate-jpa-2.0-api-1.0.0.Final.jar在ejb-persistence.jar基础上新添了一些类,估计是hibernate官方对jpa的扩展。
      

  6.   

    这儿还有一个,package org.apache.commons.mvc.annotation;import java.lang.annotation.Documented;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;/**
     * 在实体类中注解标记该类和数据库表关联
     * @version 2.0
     */
    @Target(ElementType.TYPE)  
    @Retention(RetentionPolicy.RUNTIME)  
    @Documented
    public @interface Table { /**
     * 数据库表的名称
     * @return String
     */
    public String name();

    }
    注解只能当做一个标记,和java反射配合使用
    各个@Table都各管各的,没有联系