我的PostgreSQL表具有id的类型bigserial,这意味着它们是在插入行时生成的(因此,该INSERT语句中未提供id列的值)。我<generator class="...">在XML映射文件中找不到属性的正确值时遇到困难。
bigserial
INSERT
<generator class="...">
下面的代码是我发现的最接近于Postgres的代码,但是SELECT nextval(...)在插入之前(仍在插入中显式包括id字段的值),它仍然在序列上执行。我只希望Hibernate根本不包含id字段值,从而允许Postgres自己生成值本身。
SELECT nextval(...)
<id name="id" column="id" type="java.lang.Long"> <generator class="sequence"> <param name="sequence">my_sequence_name</param> </generator> </id>
这没有记录,但是identity当PK的类型为SERIAL或时,实际上您可以在PostgreSQL中使用生成器BIGSERIAL:
identity
SERIAL
BIGSERIAL
<id name="id" column="user_id" type="java.lang.Long"> <generator class="identity"/> </id>
有关此背景,请参见 HB-875 和HHH-1675。