对于PostgreSQL和H2,Liquibase和Hibernate JPA之间的序列名称不
我有一个运行标准Hibernate JPA和Liquibase的应用程序用于生成数据库.我在运行时使用H2进行测试和使用PostgreSQL.
我的问题是我似乎无法使这个设置很好地用于生成序列的主键. 当我有这样的实体ID时: @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; 并使用liquibase创建数据库,如下所示: <column name="id" type="BIGINT" autoIncrement="true" incrementBy="1"> <constraints nullable="false" primaryKey="true" /> </column> 它在H2中工作正常,但对于PostgreSQL,Hibernate抱怨它是: "Missing sequence or table: hibernate_sequence" 我可以通过将JPA @GeneratedValue更改为以下内容来解决PostgreSQL: @Id @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "text_id_seq") @SequenceGenerator(name = "text_id_seq",sequenceName = "text_id_seq",allocationSize = 1) private Long id; 但是现在H2序列与Hibernate所期望的不匹配. 似乎没有任何简单的方法来确保Liquibase具有特定名称的序列.我该怎么做才能让这个设置起作用? 我看起来好像正在跑步 > liquibase.version 2.0.4
使用GenerationType.IDENTITY.这适用于大多数DB.
在我看来,身份生成是JPA的一个瑕疵;基于您正在使用的数据库等为生成选项设置全局覆盖太难了.在注释中进行操作会使编程难以调整. Hibernate奇怪的hibernate_sequence特别痛苦.它超出了我的原因,它不会将PostgreSQL默认序列用于生成的列. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |