programing

시퀀스 "HIbernATE_SEQUENCE"를 찾을 수 없습니다. SQL 문

closeapi 2023. 8. 24. 22:05
반응형

시퀀스 "HIbernATE_SEQUENCE"를 찾을 수 없습니다. SQL 문

저의 봄 mvc 앱에는 다음과 같은 객체가 있습니다.다음을 사용하여 데이터를 시각화하려고 합니다.devtool내 앱에서.

@Entity
@Data
public class ConsultationRequest {
    @Id
    @GeneratedValue
    private Long id;

    private String name;

    private String email;

    private String purpose;

    private String programme;

    private int year;

    private String language;

    private String comments;
    @Enumerated(EnumType.STRING)
    private ConsultationStatus status;
}

그런 다음 jpa를 사용하여 엔티티를 만들었습니다.

@Repository
public interface ConsultationRequestRepository extends JpaRepository<ConsultationRequest, Long> {

}

문제는 애플리케이션을 로드할 때 두 가지 오류가 발생한다는 것입니다.

 Unsuccessful: drop sequence hibernate_sequence
[36morg.hibernate.tool.hbm2ddl.SchemaExport  Sequence "HIBERNATE_SEQUENCE" not found; SQL statement:

그러면 제가 열었을 때.

http://localhost:8080/h2-console/

테이블이 보이지 않습니다.부팅 과정에서 테이블이 만들어지지 않은 것 같습니다.

아래와 같이 코드를 업데이트합니다.

 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 private Long id;

시퀀스 테이블 이름을 지정하지 않았기 때문에 최대 절전 모드에서는 hibernate_sequence라는 이름의 시퀀스 테이블을 검색하여 기본값으로 사용합니다.

Oracle/Postgres의 경우 사용되는 증분 필드는 시퀀스 테이블입니다.
MySql에는 자동으로 증분되는 증분 필드가 있습니다.

Spring Boot testing(H2 사용)에서 이 오류가 발생하는 경우 application.properties(또는 사용 중인 프로필)에서 다음을 사용해야 합니다.

spring.jpa.hibernate.ddl-auto=create-drop

속성 파일에서 다음 속성을 설정하면 문제를 해결하는 데 도움이 됩니다.hibernate_sequence최대 절전 모드 5.4V 문제

spring:
  jpa:
    hibernate:
      use-new-id-generator-mappings: false

확인.persistence.xml

property name="hibernate.hbm2ddl.auto" value="create"

것은 아니다.hdm2ddl

제 경우에는 효과가 있었습니다.

앱 스프링 부팅을 시작할 때 SQL 작업 오류가 발생했습니다.

스프링 속성에 설정을 추가하여 해결했습니다. 봄에:jpa.create.ddl-auto= create-drop을 최대 절전 모드로 전환하여 테이블을 자동으로 만들거나 삭제할 수 있습니다.

liquidbase와 함께 두 번째 캐시를 사용하는 경우 다음과 같이 변경 로그에 시퀀스를 추가해야 합니다.

<changeSet author="liquibase-docs"
    id="createSequence-example">
    <createSequence catalogName="cat" cycle="false"
        incrementBy="1" ordered="true" schemaName="public"
        sequenceName="hibernate_sequence" startValue="0" />
</changeSet>

위해서spring-boot 2.7.x그리고.h2 2.x추가해야 합니다.MODE=LEGACY;데이터베이스 연결:

예제 application.yml:

spring:
  datasource:
    url: jdbc:h2:mem:test;MODE=LEGACY;

application.properties 예제:

spring.datasource.url=jdbc:h2:mem:test;MODE=LEGACY;

리포지토리를 테스트하는 동안 이 문제가 발생하는 경우 아래와 같은 코드를 변경하면 다음과 같은 작업에 도움이 될 수 있습니다.

이로부터:

@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

대상:

@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

몇 가지 테스트를 실행하는 동안 이 문제가 발생했습니다.이러한 주석을 추가하여 문제를 해결할 수 있었습니다.

@Transactional
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS)
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

와 함께

spring.jpa.hibernate.use-new-id-generator-mappings=false

test-config.properties에서 작동합니다.

Mysql의 경우:

자동 검색기가 추가되지 않았습니다. 표를 수정하십시오.

ALTER TABLE_name 열 ID BIGINT AUTO_INCREMENT=1

언급URL : https://stackoverflow.com/questions/39807483/sequence-hibernate-sequence-not-found-sql-statement

반응형