0

Java 休眠和 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?

4

1 回答 1

1

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

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

如果您仍然需要为此使用 ORM,我会很想创建一些数据“登陆”表,使用您的 ORM 工具为它们生成类,然后编写一些 SQL 函数,用您刚刚的数据修补您的实时表上传。可能还有另一种更好的方法,但我想看看。

于 2012-04-12T21:22:53.840 回答