programing

스키마 유효성 검사로 인해 스프링 부트 프로젝트가 실행되지 못함: 시퀀스 누락 [hibernate_sequence]

lastmoon 2023. 8. 10. 19:06
반응형

스키마 유효성 검사로 인해 스프링 부트 프로젝트가 실행되지 못함: 시퀀스 누락 [hibernate_sequence]

Spring Boot and Hibernate 응용 프로그램을 실행하려고 하면 다음과 같은 이유로 인해 응용 프로그램이 중단되고 있습니다.

org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing sequence [hibernate_sequence]

하지만 최대 절전 모드 시퀀스를 사용하지 않기 때문에 왜 그런지 알 수 없습니다.아파치 더비에서 제 테이블은 다음과 같습니다.

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;

누가 내가 어디가 틀렸는지 조언해 줄 수 있습니까?

메이븐 종속성은 다음과 같습니다.

<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다음을 사용하여 DB에 수동으로 시퀀스를 작성할 수 있습니다.create sequence <schema>.hibernate_sequence시퀀스 생성에 대한 자세한 내용은Derby링크를 따라오세요.

이 문제를 해결하고 다음은 검색 결과입니다.

  1. 사용하는 경우GenerationType.AUTOJava Bean에서는 기본적으로 최대 절전 모드를 사용hibernate_sequence순서대로

    한 가지 방법은 다음과 같이 DB에 이 시퀀스를 만드는 것입니다.

    create sequence <schema>.hibernate_sequence

  2. 또는 사용할 수 있습니다.@GeneratedValue(strategy = GenerationType.IDENTITY)대신 자바빈 소스 코드에서 이러한 시퀀스가 필요하지 않습니다.

    Java 지속성/아이덴티티 인용:

    ID 순서 지정은 데이터베이스의 특수 IDENTITY 열을 사용하여 행이 삽입될 때 데이터베이스가 개체에 ID를 자동으로 할당할 수 있도록 합니다.ID 열은 MySQL, DB2, SQL Server, Sybase 및 Postgres와 같은 많은 데이터베이스에서 지원됩니다.Oracle은 IDENTITY 열을 지원하지 않지만 시퀀스 개체 및 트리거를 사용하여 시뮬레이션할 수 있습니다.

자세한 내용:

생성 유형.AUTO vs Generation Type.최대 절전 모드의 ID

언급URL : https://stackoverflow.com/questions/50659505/spring-boot-project-fails-to-run-because-of-schema-validation-missing-sequence

반응형