programing

'DBNAME.hibernate_sequence' 테이블이 존재하지 않습니다.

sourcetip 2023. 1. 30. 22:54
반응형

'DBNAME.hibernate_sequence' 테이블이 존재하지 않습니다.

Spring Boot 2.0.1이 있습니다.스프링 데이터를 이용한 릴리즈 어플리케이션 / jpa

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

그러나 Amazon Aurora DB에서 업데이트를 하면 다음과 같은 오류가 나타납니다.

2018-04-13 09:20 [pool-1-1000-1]ERROR o.h.id.2020.표 구조execute(discute) - hi 값 com.disc.jdbc.exceptions.jdbc4를 읽을 수 없습니다.MySQL SyntaxErrorException:테이블 'elbar.hibernate_sequence'는 sun.reflect에 존재하지 않습니다.NativeConstructorAccessorImpl.newInstance0(네이티브메서드)

저장할 엔티티에 이 항목이 있습니다.

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

ID를 취득하기 위한 DB의 단점도 피하고 싶습니다.

세대와 함께GenerationType.AUTO휴지 상태에서는 기본값이 검색됩니다.hibernate_sequencetable, 따라서 생성을 로 변경합니다.IDENTITY다음과 같습니다.

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

application.yml에 다음 설정을 추가합니다.

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

application.properties를 사용하는 경우,

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

휴지 상태 5 이전 버전을 사용하는 경우@GeneratedValue(strategy = GenerationType.IDENTITY)마법처럼 작용합니다.단, 휴지 상태5 이후 다음과 같은 수정이 필요합니다.

@Id
@GeneratedValue(strategy= GenerationType.AUTO,generator="native")
@GenericGenerator(name = "native",strategy = "native")
private Long id;

DDL

`id` BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY

이유

휴지 상태 문제에서 발췌.

현재 hibernate.id.new_generation_http가 false로 설정되어 있는 경우 @GeneratedValue(전략 = GenerationType)입니다.AUTO)는 네이티브에 매핑됩니다.이 속성이 참이면(5.x의 디폴트 값) @GeneratedValue(전략 = GenerationType).AUTO)는 항상 SequenceStyleGenerator에 매핑됩니다.

따라서 시퀀스를 네이티브로 지원하지 않는 데이터베이스(예: MySQL)에서는 IDENTY 대신 TABLE 생성기를 사용합니다.

그러나 TABLE 생성기는 이동성이 더 높지만 데이터베이스에서 값을 가져올 때마다 별도의 트랜잭션을 사용합니다.실제로 IDENTY가 JDBC 배치 업데이트를 디세블로 하여 TABLE 생성기가 풀링된 옵티마이저를 사용하는 경우에도 IDENTY는 더 잘 확장됩니다.

이전 부트 버전에서 마이그레이션하는 경우:

에서 다음 설정application.yml하이버네이션으로 인해hibernate_sequence엔트리를 표시합니다.

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

이것이 Boot 1.x의 디폴트입니다.

JPA 및 Auto-DDL

테이블 스키마와 Java 엔티티의 매핑 불일치가 발생했을 때 다음을 수행합니다.

  1. 스키마를 드롭합니다.
  2. 를 추가합니다.spring.jpa.hibernate.ddl-auto=createapplication.properties에 대한 속성
  3. 응용 프로그램 재시작

이제 엔티티를 기반으로 스키마를 다시 만듭니다.그런 다음 작성된 테이블을 이전 스키마와 비교하여 필요에 따라 차이를 확인할 수 있습니다.

경고: 응용 프로그램에서 엔티티로 지정된 모든 테이블의 데이터가 잘립니다.

이 코드를 application.properties 파일에 추가합니다.

spring.jpa.hibernate.ddl-auto=update

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

테이블을 작성하기만 하면 됩니다.

create table hibernate_sequence(
    next_val INTEGER NOT null
);

다음의 사투리 설정을 사용해도 같은 에러가 발생했습니다.

# Hibernate SQL dialect
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect

MySQL 버전 8.0.27을 사용하고 있으며, 이후 위의 설정을 다음과 같이 업데이트했습니다.

# Hibernate SQL dialect
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect

그리고 예상대로 작동했다.

서버 버전: 8.0.29 MySQL Community Server - GPL (여러 곳에서 확인 가능, MySQL 명령줄 클라이언트에서 확인)을 사용하고 있었습니다.

이전 휴지 상태 설정 파일에서 다음을 사용하려고 했습니다.

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

다음과 같이 대체:

<property name="spring.jpa.properties.hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property>

나한테는 정말 잘 작동했어.

언급URL : https://stackoverflow.com/questions/49813666/table-dbname-hibernate-sequence-doesnt-exist

반응형