![](/img/trans.png)
[英]Getting entityManageFactory error. Schema-validation: missing table [hibernate_sequence]
[英]Spring Boot project fails to run because of Schema-validation: missing sequence [hibernate_sequence]
当我尝试运行 Spring Boot 和 Hibernate 应用程序时,我发现它因为以下原因而崩溃:
org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing sequence [hibernate_sequence]
但我不明白为什么这是因为我没有使用 Hibernate 序列。 我在 Apache Derby 中的表如下:
CREATE TABLE TEAM (
TEAM_ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),
NAME VARCHAR(50) NOT NULL,
CONSTRAINT PK_TEAM PRIMARY KEY(Team_Id)
);
CREATE TABLE PLAYER (
PLAYER_ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),
NAME VARCHAR(50) NOT NULL,
NUM INTEGER NOT NULL,
POSITION VARCHAR(50) NOT NULL,
TEAM_ID INTEGER,
CONSTRAINT PK_PLAYER PRIMARY KEY(PLAYER_ID),
CONSTRAINT FK_PLAYER FOREIGN KEY(TEAM_ID) REFERENCES TEAM(TEAM_ID)
);
我的应用程序的application.properties
文件是:
# Hibernate table generation.
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.DerbyTenSevenDialect
spring.jpa.show-sql=true
# Apache Derby settings
spring.datasource.driverClassName=org.apache.derby.jdbc.ClientDriver
spring.datasource.url=jdbc:derby://localhost:1527/Library
spring.datasource.username=username
spring.datasource.password=password`
所涉及的两个 Java 类是:
@Entity
@Table(name = "TEAM")
public class Team {
@Id
@Column(name = "TEAM_ID", unique = true, nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer teamId;
@Column(name = "NAME")
private String name;
@OneToMany(cascade = CascadeType.ALL,
fetch = FetchType.EAGER,
mappedBy = "team")
private List<Player> players;
和:
@Entity
@Table(name = "PLAYER")
public class Player {
@Id
@Column(name = "PLAYER_ID", unique = true, nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer playerId;
@Column(name = "NAME")
private String name;
@Column(name = "NUM")
private int num;
@Column(name = "POSITION")
private String position;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "TEAM_ID", nullable = true)
private Team team;
谁能告诉我哪里错了?
Maven 依赖项是:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derbyclient</artifactId>
<version>10.14.2.0</version>
</dependency>
</dependencies>
您正面临这个问题,因为缺少序列hibernate_sequence
。 您可以使用create sequence <schema>.hibernate_sequence
在您的数据库上手动create sequence <schema>.hibernate_sequence
。 有关在Derby
创建序列的更多信息,请访问链接。
遇到这个问题,下面是我的搜索结果:
如果您在 java bean 中使用GenerationType.AUTO
,则默认情况下 hibernate 使用hibernate_sequence
作为序列。
因此,一种选择是通过以下方式在数据库中创建此序列:
create sequence <schema>.hibernate_sequence
或者您可以在 java bean 源代码中使用@GeneratedValue(strategy = GenerationType.IDENTITY)
代替,它不需要这样的序列。
引用 Java 持久性/身份:
身份排序使用数据库中的特殊 IDENTITY 列,以允许数据库在插入行时自动为对象分配一个 id。 许多数据库都支持标识列,例如 MySQL、DB2、SQL Server、Sybase 和 Postgres。 Oracle 不支持 IDENTITY 列,但可以通过使用序列对象和触发器来模拟它们。
进一步阅读:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.