为什么Hibernate认为@GeneratedValue从根本上是错误的?

时间:2012-07-31 10:15:09

标签: java hibernate

我刚刚阅读了Hibernate文档,并在此页面上看到了警告

http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#d0e1150

“警告 Hibernate团队一直认为这样的结构是根本错误的。在使用此功能之前,请尽量修复数据模型。“关于部分标识符生成

有人可以更详细地向我解释一下这实际上有什么问题吗?为什么Hibernate会忽视生成的值?这是否包括Hibernate中的自动递增值?

谢谢,

2 个答案:

答案 0 :(得分:2)

警告不是关于在只有一个id字段的类上使用@GeneratedValue。 警告是关于在复合键的一列中使用@GeneratedValue,这是一个非常奇怪的用例(在12年内从未见过需要这样的东西)。

所以警告是:如果你需要在复合键中使用@GeneratedValue,那么请检查你的模型,因为它很可能会出现问题。

如果您认为这不能解答您的问题,您能提供一个可能需要此功能的示例吗?

答案 1 :(得分:0)

有一个代理标识符,它应始终是单个属性(因此列),在数据库级别被声明为主键。并且有一个业务标识符(也称为业务密钥),它具有业务含义,可能包含多个属性(以及列)。

生成单个代理标识符没有任何问题。 Hibernate团队最有可能的意思是生成业务标识符的某些部分(在多个属性的情况下)是错误的。