如果实体中没有定义标识符,Hibernate如何在内部跟踪对象?

时间:2012-02-16 15:53:05

标签: hibernate

根据Hibernate参考文档

  

identifier属性是严格可选的。你可以把它们关掉   让Hibernate在内部跟踪对象标识符。

如果实体中没有定义标识符,Hibernate如何在内部跟踪对象?

进一步扩展问题,如果没有标识符,我们如何加载()/ get()实体使其持久化?

2 个答案:

答案 0 :(得分:1)

这意味着您不必自己管理标识符,也不需要在您的实体中使用该属性,但您至少需要一个支持字段来存储它,让Hibernate管理它,组件除外它们是实体的一部分,并且没有自己的身份。

答案 1 :(得分:0)

您的引用来自Hibernate的3.5版文档。

从更高版本开始,Hibernate是一个JPA提供商。在JPA中,id声明不是可选的。所以在3.6文档中你会发现这个this note

  

历史上这被认为是选择。虽然仍未执行,但应将其视为已弃用的功能,因为在即将发布的版本中提供标识符属性是完全必需的。

Hibernate使用Java或对象标识来区分会话中的对象。您通常加载/保存,但无法区分具有相同值的不同行。当然,您无法通过密钥加载,只能通过查询加载。 3.5 documentation中提到了一些由此产生的限制。