2012-04-12 40 views
0

Java的休眠和PostgreSQL与Hibernate对PostgreSQL数据库插入特定ID

表:

CREATE TABLE players 
(
    id serial NOT NULL, 
    .... 
) 

HBM:

<class name="Player" table="players"> 
     <id name="id" column="id"> 
      <generator class="identity" /> 
     </id> 
... 

我希望能够在某些情况下,插入一个特定的ID因为我从其他数据源导入数据并需要维护ID一致性。

当用hibernate插入时,即使我设置了对象的ID,它仍然会插入,而不使用我指定的ID。

是否有设置可以更改为支持在插入时指定ID?

+0

我无法回答这个问题,但我确实希望提醒您我遇到了一些问题,我已经看到有人报告过几次 - 如果您插入具有显式值的行,而不是让它们从与串行列,序列不知道这些值,并且如果您没有避免这种情况的策略,则可能会出现重复键错误。 – kgrittn 2012-04-12 21:19:19

回答

1

注:我意识到OP主要是专门询问Hibernate,我承认我没有经验。我只是觉得有必要讨论为什么这对我来说不适用于任何对象关系模型。

我不确定使用ORM直接导入数据是个好主意。如果您正在导入数据,并且导入的数据的ID位于尚未生成的范围内,那么您最终应该获得重复项(如果按照这种方式设置,则会出现主键问题)。 Postgresql创建单独的sequence对象以维护不受使用它们的表影响的序列。任何使用ORM的解决方案也应该解决这个问题。貌似可以通过setval PostgreSQL的评价被操纵(见http://www.postgresql.org/docs/9.1/static/functions-sequence.html

如果您仍然需要使用这个的ORM,我会忍不住创建一些数据“落地”表,以产生对他们的班ORM工具,然后编写一些SQL函数,用您刚刚上传的数据修补您的实时表格。可能有另一种更好的方法,但我希望看到它。

+0

这是一种侮辱?我只是觉得这是一个糟糕的主意。我不得不实施很多不好的想法。 – JayC 2012-04-12 21:33:34

+0

好吧,也许“坏主意”太强大了......我的观点是它可能需要额外的东西。 – JayC 2012-04-12 21:37:25

+0

也许它确实,也许它通过SQL语句来做会更有效。 – 2012-04-12 21:38:08

相关问题