【问题标题】:Spring Boot project fails to run because of Schema-validation: missing sequence [hibernate_sequence]Spring Boot 项目由于 Schema-validation 无法运行:缺少序列 [hibernate_sequence]
【发布时间】:2018-11-12 13:04:43
【问题描述】:

当我尝试运行 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
  • 不,这个名字根本没有。当我使用 Hibernate/JPA 时,我从来不需要这个。
  • 你能试试create sequence &lt;schema&gt;.hibernate_sequence看看结果吗
  • 我在哪里/如何创建这个?
  • 在您的数据库中。按照链接在 Derby 中创建序列。 db.apache.org/derby/docs/10.8/ref/rrefsqljcreatesequence.html

标签: java spring hibernate spring-boot


【解决方案1】:

您面临的问题是缺少序列hibernate_sequence。您可以使用create sequence &lt;schema&gt;.hibernate_sequence 在数据库上手动创建序列。有关在Derby 中创建序列的更多信息,请关注link

【讨论】:

  • 另一种方法是使用@GeneratedValue(strategy = GenerationType.IDENTITY) 声明表。这消除了对序列的需要。
【解决方案2】:

点击这个问题,下面是我的搜索结果:

  1. 如果你在你的java bean中使用GenerationType.AUTO,那么默认情况下hibernate使用hibernate_sequence作为序列。

    因此,一种选择是通过以下方式在数据库中创建此序列:

    create sequence &lt;schema&gt;.hibernate_sequence

  2. 或者您可以在您的 java bean 源代码中使用 @GeneratedValue(strategy = GenerationType.IDENTITY) 代替,这不需要这样的顺序。

    引用 Java 持久性/身份:

    身份排序使用数据库中的特殊 IDENTITY 列来 允许数据库自动为对象分配一个id 它的行被插入。许多数据库都支持标识列, 例如 MySQL、DB2、SQL Server、Sybase 和 Postgres。甲骨文没有 支持 IDENTITY 列,但可以通过使用来模拟它们 序列对象和触发器。

进一步阅读:

GenerationType.AUTO vs GenerationType.IDENTITY in hibernate

【讨论】:

    猜你喜欢
    • 2015-01-15
    • 2020-11-02
    • 1970-01-01
    • 2013-01-11
    • 2016-11-29
    • 2019-08-07
    • 2016-03-05
    • 2014-07-28
    • 1970-01-01
    相关资源
    最近更新 更多