[英]LiquiBase & Spring boot - missing sequence
在 liquibase 中,我的變更集如下所示:
<createSequence schemaName="public"
incrementBy="1"
minValue="1"
sequenceName="user_seq" />
<createTable tableName="user" schemaName="public">
<column name="id" type="bigint" defaultValueSequenceNext="user_seq">
<constraints nullable="false" primaryKey="true"/>
</column>
</createTable>
我的實體:
@Entity
@Table(name = "user")
public class User {
@SequenceGenerator(name="USER_SEQ",sequenceName="USER_SEQ")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "USER_SEQ")
@Id
protected long id;
}
Spring Boot 中的驗證步驟未通過。 休眠拋出:
模式驗證:缺少序列 [public.user_seq]
LiquiBase 執行此查詢:
CREATE SEQUENCE public.user_seq INCREMENT BY 1 MINVALUE 1
Sequence user_seq created
當我將ddl-auto
更改為更新時,hibernate 執行此查詢: create sequence public.user_seq start 1 increment 50
And JDBC throws exception: Sequence "user_seq" already exists; SQL statement:
Sequence "user_seq" already exists; SQL statement:
.
如何在 LiquiBase 中正確創建序列?
-- @Edit1 - 我嘗試在實體中使用小寫字母:USER_SEQ -> user_seq - 沒有幫助
我正在使用彈簧靴
這是我的 application.properties
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=none
spring.liquibase.change-log=classpath:liquibase-changeLog.xml
這是我的實體
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "USER_SEQ")
@SequenceGenerator(name = "USER_SEQ", sequenceName = "USER_SEQ", allocationSize = 1)
private long id;
private String name;
這是我的更改集
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd
http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">
<changeSet author="EssexBoy" id="101">
<createSequence schemaName="public" startValue="1" incrementBy="1" ordered="true" sequenceName="user_seq"/>
<createTable tableName="user" schemaName="public">
<column name="id" type="bigint">
<constraints nullable="false" primaryKey="true"/>
</column>
<column name="name" type="varchar(50)"/>
</createTable>
</changeSet>
</databaseChangeLog>
這是我的測試
@RunWith(SpringRunner.class)
@SpringBootTest
public class LiquibaseExampleApplicationTests {
@Autowired
private DataSource dataSource;
@Autowired
private UserRepository repository;
@Test
public void test1() throws Exception {
repository.save(makeUser("EssexBoy"));
repository.save(makeUser("EssexDad"));
repository.save(makeUser("EssexMum"));
repository.save(makeUser("EssexBaby"));
repository.findAll().forEach(System.out::println);
}
private User makeUser(String name) {
User user = new User();
user.setName(name);
return user;
}
}
輸出是
User{id=1, name='EssexBoy'}
User{id=2, name='EssexDad'}
User{id=3, name='EssexMum'}
User{id=4, name='EssexBaby'}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.