source

휴지 상태 4에서5로의 이행

itover 2022. 12. 1. 21:28
반응형

휴지 상태 4에서5로의 이행

하이버네이트5를 사용하는 Spring Boot 1.4로 이행하려고 합니다.테이블 작성을 포함한 MariaDB 데이터베이스의 백업스크립트가 있어요

Spring Boot의 spring-data-jpa로 인해 엔티티는 다음과 같은 ID 생성 전략을 사용하고 있습니다.

@GeneratedValue(strategy = GenerationType.AUTO)

의 마마 my에서는application.properties

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

휴지 상태 팀은 일반적으로 이 설정(false 값)을 권장하지 않습니다.

휴지 상태일 경우 테이블을 생성할 수 있습니다.백업 스크립트의 테이블과 차이가 있을 수 있습니다.

생성기에 대해 잘못된 값을 사용하고 백업 스크립트를 사용하여 그 후에 true로 설정하면 orign 키에 대한 문제가 발생합니다.

하위 행을 추가하거나 업데이트할 수 없습니다. 외부 키 제약 조건이 실패했습니다...

계속 거짓으로 일관해도 같은 결과가 나옵니다.

Hibernate 5의 새로운 생성기로 이행하여 이전 데이터베이스(구조가 아닌)의 데이터를 보유하려면 어떤 전략을 사용할 수 있습니까?

좀 더 범용적인 방법을 찾을 수 있을까요?휴지 상태에만 해당되지 않음

4 에서는 Hibernate 4를 사용하여 과 같은 문제가 발생합니다.GenerationType.AUTO 데이터베이스가 「」를 서포트하고 있는 ,IDENTITY ★★★★★★★★★★★★★★★★★」AUTO_INCREMENT테이블 베이스 시퀀스를 사용하는 것보다 데이터 타입이 우선됩니다.

5의 경우, 「」 「」5」GenerationType.AUTO는 이전에 기반 하는 것이 입니다.이러한 시퀀스는, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」를 사용하고 있습니다.IDENTITY ★★★★★★★★★★★★★★★★★」AUTO_INCREMENT논리를 바꾸는 이유는 다소 복잡하지만 더 나은 대안이 있다고 해도 충분하다.

테이블 크기, 수, 엔티티 간의 관계에 따라서는 번거롭기 때문에 여러 단계의 이행 경로가 권장됩니다.

  1. 먼저 새로운 ", " "를 사용합니다." 등).false를 참조해 주세요.
  2. 모든 것이 작동되는지 확인합니다. 상태 정보라고도 합니다.
  3. 을 변경하다@GeneratedValue하는 GenerationType.IDENTITY
  4. 생성기를 사용하도록 사용)true를 참조해 주세요.
  5. 모든 것이 작동되는지 확인합니다. 상태 정보라고도 합니다.

이 시점에서는 데이터베이스에서 아무것도 변경할 필요가 없으며 백업 상태 그대로 유지되고 있습니다.새 엔티티에 대해 새 식별자 매핑을 사용하고 기존 엔티티에 대한 이전 방식을 보존할 수 있도록 Java 코드를 마이그레이션하기만 하면 됩니다.

이 시점부터 한 번에 1개의 엔티티를 이행할 것을 권장합니다.

  1. Java 클래스를 변경하여 named sequence generator를 사용하여hibernate_sequences테이블.
  2. 엔티티 데이터의 MAX(ID)를 결정하고 적절한 다음 ID 값을 설정합니다.hibernate_sequences엔티티의 이름 있는 식별자 테이블.
  3. 여기서 지루한 부분은 이 엔티티의 기존 ID 열과 관련된 모든 외부 키를 드롭하고 데이터 유형을 변경하지 않도록 변경해야 한다는 것입니다.AUTO_INCREMENT또는IDENTITY그 대신 이런 게 있을 것 같아요BIGINT또는INT그런 다음 외부 키 제약 조건을 원래대로 되돌리려고 합니다.

이 시점에서 엔티티는 네이티브가 아닌 시퀀스 테이블의 로직을 사용하기 시작해야 합니다.AUTO_INCREMENT또는IDENTITY기능성AUTO하이버네이트5 이전에 사용되었습니다.

크고 복잡한 시스템에서는 재미없을 것입니다.

과거 프로젝트에서 ORM5의 새로운 식별자에 적응했는지 여부를 평가해야 했고, 복잡한 기존 스키마를 적응시키는 데 소요되는 시간이 가치가 없다고 판단했습니다.우리는 상태를 유지하기 위한 첫 번째 1~5단계를 수행하고 새로운 실체가 새로운 것을 활용할 수 있도록 했습니다.이 계획은 개발자들이 시간을 두고 필요에 따라 마지막 1-3단계를 완료하도록 하는 것이었습니다.

언급URL : https://stackoverflow.com/questions/38815625/migration-from-hibernate-4-to-5

반응형