2009-01-29 86 views
1

是否有可能在休眠有一个实体,其中一些ID分配和一些生成?休眠和身份证

例如:

一些对象具有被数据库的外部产生1-10000之间的ID;而一些实体没有ID而需要由数据库生成的ID。

回答

1

您可以使用'assigned'作为Id生成策略,但是在将其保存到数据库之前,必须先为该实体提供其id。或者,您可以构建自己的org.hibernate.id.IdentifierGenerator实现,以您所建议的方式提供Id。

虽然我必须同意w/Cade Roux,并且这样做似乎比使用内置增量,uuid或其他形式的id代更困难。

1

我会避免这种情况,并简单地有一个关于对象的来源和外部标识符的列(假设外部标识符是一个重要的价值,你想跟踪)的信息的辅助列。

将列用于混合目的通常是一个坏主意 - 在这种情况下,从代理键的性质推断出对象的来源。

1

使用你喜欢的任何发生器,确保它可以从一个偏移量开始(当你使用一个序列时,你可以相应地初始化它)。

对于所有其他实体,请在插入它们之前调用setId()。如果id属性为0,Hibernate将只生成一个id。注意,你应该首先将带有id的对象插入到db中,然后使用它们。 Hibernate中有很多代码,当id!= 0时,预计该对象位于数据库中。

另一种解决方案是对带有id的实体使用负号。这也将确保在插入新对象时不会发生冲突。