当我使用spring.jpa.hibernate.ddl-Auto=Create时,序列和表都会被创建,但是当这个属性设置为UPDATE时,只会创建表。我已经创建了一个Spring引导应用程序,并且对于DB,我使用的是postgres。但是,当我检查h2数据库(它是嵌入的)时,也为更新值创建了序列和表。我无法将属性设置为Create,因为它将在应用程序重新启动时删除表。有谁能给我开导一下吗?先谢谢你。
mkshixfv1#
您可以在Spring文档中阅读有关DDL自动生成的内容链接:https://docs.spring.io/spring-boot/docs/1.0.x-SNAPSHOT/reference/html/howto-database-initialization.html或https://www.baeldung.com/spring-boot-data-sql-and-schema-sql
e0bqpujr2#
Hibernate中有一个与Postgres方言相关的错误。以下是PostgresSQLDialect中用于检查模式中是否存在序列的方法(顺便说一句,这是错误的):
@Override public String getQuerySequencesString() { return "select relname from pg_class where relkind='S'"; }
如果数据库中的任何模式中存在任何序列,则上述查询将返回序列。如果有任何模式包含任何序列,则不会在该数据库的指定模式中创建序列。为了解决这个问题,我编写了一个定制的Postgres方言,并将查询更改为以下内容:
@Override public String getQuerySequencesString() { return "select sequencename from pg_catalog.pg_sequences where schemaname='"+schemaName+"'"; }
它解决了DDL-AUTO设置为UPDATE时的问题。现在正在创建序列。
4bbkushb3#
对任何感兴趣的人来说:Hibernate检查所有包含hibernate_sequence的表。但是,它只需要在PostgreSQL上检查currentSchema。刚刚更改了对Mashish091的解决方案的查询。
hibernate_sequence
currentSchema
return "select * from information_schema.sequences where sequence_schema ='" + schemaName + "'";
3条答案
按热度按时间mkshixfv1#
您可以在Spring文档中阅读有关DDL自动生成的内容
链接:https://docs.spring.io/spring-boot/docs/1.0.x-SNAPSHOT/reference/html/howto-database-initialization.html
或
https://www.baeldung.com/spring-boot-data-sql-and-schema-sql
e0bqpujr2#
Hibernate中有一个与Postgres方言相关的错误。以下是PostgresSQLDialect中用于检查模式中是否存在序列的方法(顺便说一句,这是错误的):
如果数据库中的任何模式中存在任何序列,则上述查询将返回序列。如果有任何模式包含任何序列,则不会在该数据库的指定模式中创建序列。为了解决这个问题,我编写了一个定制的Postgres方言,并将查询更改为以下内容:
它解决了DDL-AUTO设置为UPDATE时的问题。现在正在创建序列。
4bbkushb3#
对任何感兴趣的人来说:
Hibernate检查所有包含
hibernate_sequence
的表。但是,它只需要在PostgreSQL上检查currentSchema
。刚刚更改了对Mashish091的解决方案的查询。