2009-06-05 106 views
33

当我使用@Entity注释一个类并尝试解析依赖关系时,我可以选择两个不同的包之间的包,javax.persistence.Entity和org.hibernate.annotations.EntityJPA实体和Hibernate实体之间的区别

javax包是JPA的实体注释,但为什么有一个hibernate实体注释,它与JPA的注解有什么不同呢?它只是一个允许定义更多属性的扩展吗?

回答

34

org.hibernate.annotations.Entity有一些额外的属性,javax.persistence.Entity尚未标准化。额外的功能只有在直接使用hibernate的AnnotationConfiguration或hibernate是JPA提供程序时才有效。

the FAQ编辑:新的链接 the specific question 编辑:新的链接the answer

我使用@ org.hibernate.annotations.Entity,并得到一个未知实体例外

总是导入@ javax.persistence.Entity

@ org.hibernate.annotations.Entity完成@ javax.persistence.Entity但不补发

例如,有一个名为optimisticLock的属性,它告诉Hibernate是否使用标准版本列或在更新时比较所有列。此行为不在JPA规范中,因此为了配置它,您必须使用在其自己的注释中找到的特定于hibernate的扩展。

像这样:

@Entity 
@org.hibernate.annotations.Entity(optimisticLock=OptimisticLockType.ALL) 
public class MyEntity implements Serializable { 
... 
} 
-1

我不确定差异,但我确定如果您的类路径中有Hibernate jar,那么您使用的是Hibernate JPA。 Hibernate提供了JPA的实现。即使您使用的是使用Hibernate JPA的javax.persistence包。

区别只在于命名。他们可能会在Hibernate包空间和javax包空间中提供相同的类。

1

@在你的项目中使用,如果假设你想使用我们需要改变的代码JDBC模板或ibatis的org.hibernate.annotations。如果我们使用javax.persistence,则不需要更改代码。这是org.hibernate.annotations和javax persistence之间的主要区别