JPA实体和Hibernate实体的区别

35
当我使用@Entity注解一个类并尝试解决依赖关系时,我可以在两个不同的包javax.persistence.Entity和org.hibernate.annotations.Entity中选择包。 javax包是JPA的entity注释,但为什么会有hibernate entity注释? 它与JPA的注释有什么区别?它只是为了允许定义更多属性的扩展吗?
3个回答

37

org.hibernate.annotations.Entity具有一些额外的属性,这些属性不是javax.persistence.Entity标准化的。只有在直接使用hibernate的AnnotationConfiguration或者hibernate是JPA提供者时,这些额外的特性才会起作用。

来自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 {
...
}

2

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


-1

我不确定它们之间的区别,但我确定如果您在类路径中有Hibernate Jars,则正在使用Hibernate JPA。Hibernate提供了JPA的实现。即使您使用javax.persistence包,您也在使用Hibernate JPA。

区别可能仅在于命名上。它们可能在Hibernate包空间和javax包空间中都提供相同的类。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接