Java hibernate和Postgresql
表:
CREATE TABLE players
(
id serial NOT NULL,
....
)
HBM:
<class name="Player" table="players">
<id name="id" column="id">
<generator class="identity" />
</id>
...
我希望能够在某些情况下插入特定ID,因为我从其他数据源导入数据并需要保持ID一致性。
当使用休眠插入时,即使我设置了对象的ID,它仍然插入而不使用我指定的ID。
我是否可以更改设置以支持在插入时指定ID?
答案 0 :(得分:1)
注意:我意识到OP主要是专门询问Hibernate,我承认,我没有经验。我只是觉得有必要讨论为什么对我来说这对任何对象关系模型都不合适。
我不确定使用ORM直接导入数据是个好主意。如果您要导入数据并且导入的数据的ID在尚未生成的范围内,您最终应该获得重复(如果以这种方式设置,则会出现主键问题)。 Postgresql创建单独的sequence
对象来维护序列,这些序列不受使用它们的表的影响。使用ORM的任何解决方案也应该解决该问题。看起来可以通过对setval
的Postgresql评估进行操作(参见http://www.postgresql.org/docs/9.1/static/functions-sequence.html)
如果您仍然需要使用ORM,我很想创建一些数据“登陆”表,使用您的ORM工具为它们生成类,然后编写一些SQL函数来修补您的实时表与您刚刚上传的数据。可能还有另一个更好的方法,但我希望看到它。