【发布时间】:2017-11-28 09:17:49
【问题描述】:
我在实体中有以下Id描述:
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Long id;
生成此 id 的 Liquibase 指令如下:
<column name="id" autoIncrement="true" type="INT">
<constraints nullable="false" primaryKey="true" primaryKeyName="pk_entity"/>
</column>
我还有 liquibase 脚本可以插入到这个表中的预定义值,例如
<insert tableName="entityTable" schemaName="public">
<column name="id">1</column>
<!- other fields-->
</insert>
当我尝试使用 Jpa 存储库插入没有 id 的新记录时,问题出现了。 我收到一条错误消息,例如“重复 ID”。 所以,我知道 jpa(hibernate) 不使用 postgresql 序列来获取新的 id 值。而且我不想在实体的 id 描述中包含序列名称。我希望这种情况可以由 postgresql 本身解决。 而且我不会使用“hibernate_sequence”。 所以,知道如何解决这个问题。 谢谢。
【问题讨论】:
-
FYI JPA
GenerationType.IDENTITY用于 PostgreSQL 将意味着使用“SERIAL”列类型(即在数据存储中生成)。这不是一个序列。如果你想要一个 SEQUENCE 那么你会使用 JPAGenerationType.SEQUENCE -
我知道,但 liquibase 不会生成“串行”类型。
-
所以如果你想同时使用 JPA 和 Liquibase 就不能使用 IDENTITY 和 JPA ...
-
如果您使用
autoIncrement="true",那么 Liquibase 将生成一个serial列
标签: java postgresql hibernate jpa liquibase