JPA 实体和休眠实体之间的区别

2022-09-01 07:47:45

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

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


答案 1

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

来自 常见问题解答编辑: 新链接 具体问题 编辑: 新链接 答案

我使用@org.hibernate.annotations.Entity并得到一个未知实体异常

始终导入@javax.持久性.实体

@org.hibernate.annotations.Entity 完成@javax.persistence.Entity,但不是替代项

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

喜欢这个:

@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 持久性之间的主要区别。


推荐