7.8. Hibernate 변경
JBoss EAP 8에는 Java 프로그래밍 언어를 위한 개체 관계형 매핑 툴인 Hibernate ORM 6.2 지원이 포함되어 있습니다. Hibernate ORM 6.2 설명서에 대한 자세한 내용은 Hibernate ORM 6.2 를 참조하십시오.
JBoss EAP 7.4에서 JBoss EAP 8.0으로 마이그레이션하는 경우 Hibernate ORM 버전의 특정 Hibernate ORM 마이그레이션 설명서를 참조하십시오.
JBoss EAP 7.4에서 JBoss EAP 8로 마이그레이션하려면 다음 단계를 완료해야 합니다.
- Hibernate ORM 5.3에서 5.4로 마이그레이션
- Hibernate ORM 5.4에서 5.5로 마이그레이션
- Hibernate ORM 5.5에서 5.6로 마이그레이션
- Hibernate ORM 5.6에서 6.0으로 마이그레이션
- Hibernate ORM 6.0에서 6.1으로 마이그레이션
- Hibernate ORM 6.1에서 6.2로 마이그레이션
- Hibernate ORM 입문
- 더 이상 사용되지 않는 Hibernate ORM 클래스
- Hibernate ORM 클래스 포함
- Hibernate ORM 내부
이전 버전의 JBoss EAP 및 Hibernate에서 마이그레이션하려면 다음 단계를 완료해야 합니다.
- Hibernate ORM 4.3에서 Hibernate ORM 5.0으로 마이그레이션
- Hibernate ORM 5.0에서 Hibernate ORM 5.1로 마이그레이션
- Hibernate ORM 5.1 및 Hibernate ORM 5.2에서 Hibernate ORM 5.3으로 마이그레이션
7.8.1. Hibernate ORM 5.3에서 5.4로 마이그레이션 링크 복사링크가 클립보드에 복사되었습니다!
이 섹션에서는 Hibernate ORM 버전 5.3에서 5.4로 마이그레이션할 때 필요한 변경 사항을 중점적으로 설명합니다. Hibernate ORM 5.3과 Hibernate ORM 5.4 간에 구현된 변경 사항에 대한 자세한 내용은 Hibernate ORM 5.4 마이그레이션 가이드를 참조하십시오.
알려진 변경 사항
다음은 Hibernate ORM 버전 5.3에서 5.4로 마이그레이션할 때의 몇 가지 변경 사항에 대해 설명합니다.
7.8.1.1. 지연된 ID 삽입 동작 덮어쓰기 링크 복사링크가 클립보드에 복사되었습니다!
-
Hibernate 5.3에서
DelayedPostInsertIdentifier동작이FlushMode또는FlushModeType값에 따라 영향을 받을 수 있도록 지원이 제공되어Extended PersistenceContext지원이 향상되었습니다. 안타깝게도 이러한 변화에는 몇 가지 문제가 포함되어 있었습니다. -
Hibernate 5.4에서는 가능한 한 많은 Hibernate 5.3 동작을 유지하고 선택한 사용 사례에 대해 매우 구체적인
지연PostInsertIdentifier동작만 복원하기로 결정했습니다. - Hibernate 5.4를 보다 유연하게 만들기 위해 Hibernate 5.3 동작을 완전히 비활성화하고 Hibernate 5.2 및 이전 버전으로 되돌리는 임시 솔루션으로 구성 옵션이 추가되었습니다.
7.8.1.2. SQL Server JDBC Driver 버전이 최소 6.1.2로 업그레이드 링크 복사링크가 클립보드에 복사되었습니다!
HHH-12973 수정으로 인해 JDBC 드라이버 버전을 6.1.2로 업그레이드해야 합니다. 이 문제로 인해 이전 버전의 SQL Server JDBC 드라이버는 데이터베이스 연결을 닫지 않고 INFORMATION_SCHEMA.SEQUENCES 를 검사할 수 없습니다.
7.8.2. Hibernate ORM 5.4에서 5.5로 마이그레이션 링크 복사링크가 클립보드에 복사되었습니다!
이 섹션에서는 Hibernate ORM 버전 5.4에서 5.5로 마이그레이션할 때 필요한 변경 사항을 중점적으로 설명합니다. Hibernate ORM 5.4와 Hibernate ORM 5.5 간에 구현된 변경 사항에 대한 자세한 내용은 Hibernate ORM 5.5 마이그레이션 가이드를 참조하십시오.
알려진 변경 사항
Hibernate ORM 5.5 버전은 5.4 유지 관리 릴리스에 적용된 모든 버그 수정을 포함하고 Jakarta 지속성 API에 대한 지원을 도입하므로 Hibernate ORM 5.4와 유사합니다.
7.8.2.1. Dom4J 기반 XML 매핑 링크 복사링크가 클립보드에 복사되었습니다!
Hibernate의 XML 매핑 정의 구문 분석 구현은 이 종속성을 제거하기 위한 지속적인 진행 상황을 보장하기 위해 Cryostat4J를 기반으로 재작업을 수행했습니다.
7.8.2.2. "enhanced proxies" 기능을 비활성화하는 기능 제거 링크 복사링크가 클립보드에 복사되었습니다!
"승인된 프록시" 기능은 Hibernate 5.3의 선택적 성능 개선 기능으로 도입되었습니다. 이 기능은 이제 영구적으로 활성화됩니다.
7.8.3. Hibernate ORM 5.5에서 5.6로 마이그레이션 링크 복사링크가 클립보드에 복사되었습니다!
이 섹션에서는 Hibernate ORM 버전 5.5에서 5.6로 마이그레이션할 때 필요한 변경 사항을 중점적으로 설명합니다. Hibernate ORM 5.5 및 Hibernate ORM 5.6 간에 구현된 변경 사항에 대한 자세한 내용은 Hibernate ORM 5.6 마이그레이션 가이드를 참조하십시오.
더 이상 사용되지 않는 기능
Hibernate 5.6 버전은 이전 Hibernate 5.5 버전과 매우 유사하며, 이전 Hibernate 릴리스에서 더 이상 사용되지 않는 일부 기능은 제거되지 않습니다.
7.8.3.1. Javassist 제거 링크 복사링크가 클립보드에 복사되었습니다!
더 이상 엔터티의 바이트 코드 개선에 사용할 구현으로 javassist 를 선택할 수 없습니다. byte Buddy 는 기본값이며 javassist 는 잠시 더 이상 사용되지 않으며 이제 제거되었습니다. 이는 애플리케이션에 기능적인 영향을 미치지 않습니다 . hibernate.bytecode.provider=javassist 속성을 구성하는 데 더 이상 유효하지 않은 유일한 예외가 있습니다. 이 페타르를 사용하는 경우 이 속성을 제거할 수 있습니다. Hibenate ORM이 더 이상 종속 항목 간에 javassist 를 나열하지 않는 문제가 발생할 수 있습니다.
7.8.4. Hibernate ORM 5.6에서 6.0으로 마이그레이션 링크 복사링크가 클립보드에 복사되었습니다!
이 섹션에서는 Hibernate ORM 버전 5.6에서 6.0으로 마이그레이션할 때 필요한 변경 사항을 설명합니다. Hibernate ORM 5.6과 Hibernate ORM 6.0 간에 구현된 변경 사항에 대한 자세한 내용은 Hibernate ORM 6.0 마이그레이션 가이드를 참조하십시오.
Hibernate 6.0 릴리스에는 다음과 같은 변경 사항이 포함되어 있습니다.
- Java 11은 Hibernate 6.0의 최소 호환 가능 기준 버전입니다.
-
Jakarta Persistence: Hibernate ORM 6.0 릴리스의 또 다른 중요한 변경 사항은 Jakarta EE 사양에 정의된 Java EE 사양에서 자카르타 지속성에 정의된 대로 Java Persistence에서 정의한 대로 이동하는 것을 포함합니다. 이러한 변경으로 인한 가장 중요한 영향은 Java Persistence가
javax.persistence인 Java Persistence 대신jakarta.persistence 클래스 jakarta.persistence 클래스를 사용하는 것입니다.* - JDBC에서 읽기: Hibernate ORM 6.0 버전의 개발의 또 다른 이유는 JDBC ResultSet에서 이름(read-by-name)에서 결과를 읽어 위치(읽기별)로 결과를 읽는 것입니다. 이러한 변경으로 처리량 테스트를 진행하여 스케일링을 개선했습니다.
생성된 SQL: 이 기능으로 인해 다음과 같은 향상된 기능이 생성되었습니다.
- 열 별칭은 더 이상 생성되지 않음
- 열 참조는 "unique-d"입니다.
- 조인의 정의 및 불필요한 조인의 더 나은 결정(두 번째 테이블, 상속 테이블)
-
Object - 이전 버전의 Hibernate에서는 모든 식별자 유형이
Serializable을 구현해야 했으며, Hibernate 6.0에서는 식별자가 임의의Object가 될 수 있으므로 이 제한을 제거했습니다. 이 변경 사항은Serializable을 사용하여 이전에 정의한 많은 API 및 SPI 메서드에 영향을 미칩니다. -
@IdGeneratorType: 이 릴리스에서는
@IdGeneratorType주석을 사용하여 유형 안전한 방식으로 ID 생성을 위한 사용자 정의 생성기를 정의할 수 있습니다. -
암시적 식별자 시퀀스 및 테이블 이름: Hibernate가 식별자 생성과 연관된 시퀀스 및 테이블에 대한 암시적 이름을 결정하는 방법이 Hibernate 6.0에서 수정되었으며, 이는 사용자가 애플리케이션을 마이그레이션하는 데 영향을 미칠 수 있습니다. 이번 릴리스에서는 Hibernate가 기본적으로 단일 시퀀스
hibernate_sequence대신 엔티티 계층 구조당 시퀀스를 생성합니다. -
암시적 시퀀스 생성기의 기본값: 이전에
hibernate_sequence와 같은 Implicit 시퀀스는 이제 JPA@SequenceGenerator주석의 기본값을 따릅니다. 즉, 시퀀스의 할당 크기는 50입니다. - 유형 시스템: Hibernate 6.0이 주요 릴리스이므로, 또 다른 중요한 변경 사항은 Hibernate의 매핑 주석을 수정하고 이를 보다 안전하게 만드는 것이었습니다. 이 기능은 이 릴리스에서 읽기별 변경 사항을 구현하기 위해 유형 관련 계약이 이미 변경되었기 때문에 이 기능을 제공하기로 결정했습니다.
-
쿼리: 쿼리 기능에 많은 변경 사항이 도입되었습니다. 전용 트리 구조로 이동하여 HQL 및 Criteria 쿼리를 모델링하고, 삽입, 업데이트, 삭제와 같은 대규모 SQM DML 명령 구현,
hibernate.criteria.copy_tree속성의 동작 변경 및 이 릴리스에 패스스루 토큰 포함과 같은 쿼리 기능이 도입되었습니다. -
#onSave메서드의 서명 변경:#onSave메서드의 서명이부울 onSave(Object 엔터티,에서Serializableid, Object[] state, String[] propertyNames, Type[] 유형)부울 onSave(Object entity, Object[] state,에서 부울로 변경되었습니다.Object[] state, Type[] propertyNames, Type[] types) - 가져오기 원형 결정: 이전 버전의 Hibernate가 깊이 우선적인 접근 방식을 사용하여 페치된 페치된 페치(Parther-first) 접근 방식을 사용하여, 경우에 따라 홀수의 "회용성" 결정이 초래되기도 합니다. Hibernate 6.0부터 이제 가져오기 결정이 먼저 너비를 사용하여 수행됩니다.
-
org.hibernate.loader 재구성:
loader.collection패키지의 콘텐츠가loader.ast.spi및loader.ast.internal로 재구성되어 SQM API에 맞게 조정되었습니다. -
SQL 패키지 재구성:
sql.ordering의 내용이metamodel.mapping.ordering.ast로 이동되었습니다. -
hbm.xml 매핑 사용 중단: 레거시
hbm.xml매핑 형식은 더 이상 사용되지 않으며 6.x 이상으로 더 이상 지원되지 않습니다. -
lazy association adherance: Hibernate 6.0,
fetch="join" 또는 @Fetch(FetchMode.JOIN)를 사용한 지연 연관은 id i.e.에 의해 로드될 때,Session#get/EntityManager#find를 통해 쿼리가 lazy로 취급된 경우에도 원하는 것으로 간주되었습니다. Hibernate 6.0부터는 가져오기 메커니즘에 관계없이 이러한 연결의 게으름이 적절하게 유지됩니다.lazy="false" 또는 @ManyToOne( EAGER)/@OneToOne(fetch = EAGER)/@OneToMany(fetch = EAGER)/@OneToMany(fetch = EAGER)를 지정하여 이전 버전과의 호환성을 달성할 수 있습니다. -
hbm.xml < return-join/> : Hibernate 6.0에 따라 <return-join/>의동작을 변경하면 선택 항목을 추가하는 대신 연관을 가져옵니다.
이러한 기능에 대한 자세한 내용은 Hibernate ORM 6.0 마이그레이션 가이드를 참조하십시오.
Hibernate 6.0 릴리스에는 다음과 같이 나열된 이전 Hibernate 릴리스에서 많은 기능 제거 기능이 포함되어 있습니다.
-
HBM.xml여러 <column/>이 허용되지 않음 - 6.0에서 여러 열이 있는 기본 속성 매핑 지원이 제거되었습니다. 이제 구성 요소 클래스 특성에서CompositeUserType클래스 해석을 올바르게 지원합니다. - 레거시 Hibernate Criteria API - Hibernate 5.x에서 더 이상 사용되지 않는 레거시 Hibernate Criteria API는 Hibernate 6.0에서 제거되었습니다.
-
NativeQuery를 통해 호출 가능 -
NativeQuery를 사용하여 SQL 함수 및 프로시저를 더 이상 지원하지 않습니다. 대신org.hibernate.procedure.ProcedureCall또는jakarta.persistence.StoredProcedureQuery와 같은 방법을 사용합니다. - HQL fetch all properties clause - 모든 속성 절이 HQL 언어에서 제거되었습니다.
- Cryostat 통합 - Hibernate는 더 이상 Cryostat 환경과의 통합을 위한 기본 지원을 제공하지 않습니다.
- JACC 통합 - Hibernate는 더 이상 JACC 환경과의 통합을 위한 내장 지원을 제공하지 않습니다.
Hibernate 6.0에서 제거된 기능에 대한 자세한 내용은 Hibernate ORM 6.0 마이그레이션 가이드를 참조하십시오.
7.8.5. Hibernate ORM 6.0에서 6.1으로 마이그레이션 링크 복사링크가 클립보드에 복사되었습니다!
이 섹션에서는 Hibernate ORM 버전 6.0에서 6.1으로 마이그레이션할 때 필요한 변경 사항을 설명합니다. Hibernate ORM 6.0과 Hibernate ORM 6.1 간에 구현된 변경 사항에 대한 자세한 내용은 Hibernate ORM 6.1 마이그레이션 가이드를 참조하십시오.
Hibernate 6.1 릴리스에는 다음과 같은 변경 사항이 포함되어 있습니다.
-
기본 배열:
byte[]/Byte[]및char[]/Character[]이외의 기본 배열과 기본 컬렉션(컬렉션의 하위 유형만)은 기본적으로 새 메서드getArrayTypeName에 의해 결정된 대로 SQL 표준 배열 유형에 매핑되며org.hibernate.dialect.Dialect.Dialect의 standardArrays를 지원합니다. -
enum 매핑 변경: 이제 Enums는
TINYINT에 매핑되기 전과 마찬가지로 기본적으로 type code>-<Type.SMALLINT에 매핑됩니다. Java에서 32K enum 항목을 효과적으로 허용하므로 이 매핑은 거의 정확하지 않지만TINYINT는 1바이트 유형일 뿐입니다.
Hibernate 6.1에 포함된 기능에 대한 자세한 내용은 Hibernate ORM 6.1 마이그레이션 가이드를 참조하십시오.
7.8.6. Hibernate ORM 6.1에서 6.2로 마이그레이션 링크 복사링크가 클립보드에 복사되었습니다!
이 섹션에서는 Hibernate ORM 버전 6.1에서 6.2로 마이그레이션할 때 필요한 변경 사항을 중점적으로 설명합니다. Hibernate ORM 6.1과 Hibernate ORM 6.2 간에 구현된 변경 사항에 대한 자세한 내용은 Hibernate ORM 6.2 마이그레이션 가이드를 참조하십시오.
Hibernate 6.2 릴리스에는 다음과 같은 향상된 기능이 포함되어 있습니다.
DDL 유형 변경:
-
OffsetTime 매핑 변경 사항 - 이 릴리스에서
OffsetTime은@TimeZoneStorage및hibernate.timezone.default_storage설정에 따라 다릅니다. 기본 설정은TimeZoneStorageType.DEFAULT이므로 이러한 열에 대한 DDL 기대치가 변경되었습니다. -
MariaDB의 UUID 매핑 변경 사항 - MariaDB의 UUID 매핑 변경 사항 - MariaDB의 유형 code Cryostat
Types.UUID는 기본적으로바이너리(16를 사용했던 이전 위치와 비교하여 DDL 유형uuid를 나타냅니다. 이러한 변경으로 인해 기존 데이터베이스에서 스키마 유효성 검사 오류가 발생할 수 있습니다. -
SQL ServerSQL Server의 UUID 매핑 변경 사항 - SQL Server의
UUID 매핑 변경 사항 - SQL Server의 유형 code CryostatTypes.UUID는 기본적으로binary(16를 사용했던 이전과 비교했을 때 DDL 유형uniqueidentifier를 나타냅니다. 이러한 변경으로 인해 기존 데이터베이스에서 스키마 유효성 검사 오류가 발생할 수 있습니다. -
Oracle 12.1 이상에서 JSON 매핑 변경 사항 - Oracle 12.1 이상에서 기본적으로 형식은 DDL 유형 blob 및 21+에서 json을
나타냅니다.이러한 변경으로 인해 기존 데이터베이스에서 스키마 유효성 검사 오류가 발생할 수 있습니다. -
H2 1.4.200 이상에서 JSON 매핑 변경 사항인 경우 기본적으로 code Cryostat
Types.JSON은 DDL 유형 JSON을참조합니다. 이러한 변경으로 인해 기존 데이터베이스에서 스키마 유효성 검사 오류가 발생할 수 있습니다. - enums의 데이터 유형 - Hibernate 6.2부터 시작, enum을 저장하기 위한 암시적 SQL 데이터 형식의 선택이 enum 클래스에 정의된 항목 수에 민감합니다.
-
시간대 및 오프셋 스토리지 -
hibernate.timezone.default_storage의 기본값은DEFAULT입니다. -
byte[]/
Character[]매핑 변경 - Hibernate 6.2를 사용하면 도메인 모델의 Cryostat[] 및 characters[]매핑 변경의 매핑을 처리할 수 있습니다. -
선택적 일대일 매핑에 대한 Cryostat 제약 조건 - Hibernate의 이전 버전에서는 옵션으로 표시된 논리 일대일 연결에 대해 데이터베이스에 Cryostat 제약 조건을 생성하지 않았습니다.
이제 Hibernate 6.2부터 이러한 Cryostat 제약 조건이 생성됩니다. -
Oracle의 기본 SQL 쿼리에서 숫자(n,0)에 대한 열 유형 유추 - Hibernate 6.0 이후 Oracle에서 스케일 0이 있는 유형 번호는 전체 범위에 따라
부울,tinyint,smallint,int또는bigint로 해석되었습니다. 이제 scale 0이 있는 형식 번호의 열은 전체 범위에 따라int또는bigint로 해석됩니다. - 레거시 데이터베이스 버전 지원 제거 - Hibernate 6.2에는 Hibernate에서 지원하는 대부분의 데이터베이스 방언에 대해 지원되는 최소 데이터베이스 버전의 개념이 도입되었습니다.
-
CDI 처리 변경 - CDI를 사용할 수 있고 구성된 경우 Hibernate는 CDI Cryostat
Manager를 사용하여 다양한 Cryostat 참조를 해결할 수 있습니다. Hibernate 6.2부터 이러한 확장은hibernate.cdi.extensions가true로 설정된 경우에만 CDI CryostatManager에서 확인됩니다. -
개선 사항 기본값 및 사용 중단 변경 -
enableLazyInitialization및enableDirtyTracking개선 툴 옵션, 글로벌 속성hibernate.bytecode.use_reflection_optimizer및hibernate.enhancer.enableLazyInitialization및hibernate.enhancer.enableDirtyTracking구성 설정이 더 이상 사용되지 않습니다. -
org.hibernate.cfg및org.hibernate.loader의 패키지 업데이트:org.hibernate.cfg및org.hibernate.loader패키지가 업데이트되어 API, SPI 및 내부로 간주되는 계약 간의 구별이 명확하게 표시됩니다. -
통합 계약 변경 (SPI) - Hibernate ORM 6.2의 개발 중에 다음 SPI가 수정되었습니다.
EntityPersister#lock,EntityPersister#multiLoad,Executable#afterDeserialize,JdbcType#getJdbcRecommended JavaTypeMapping(). - 쿼리 경로 비교: Hibernate 6.2에 따라 경로 비교는 조기에 확인되었습니다.
-
batch Fetching 및 LockMode -
LockMode가READ보다 크면 Hibernate에서 배치 가져오기를 실행하지 않으므로 기존의 초기화되지 않은 프록시가 초기화되지 않습니다. 잠금 모드가 배치 가져오기 큐의 프록시 중 하나와 다르기 때문입니다.
7.8.7. Hibernate ORM 4.3에서 Hibernate ORM 5.0으로 마이그레이션 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP 7.0에는 Hibernate ORM 5.0이 포함되어 있습니다. 이 섹션에서는 Hibernate ORM 버전 4.3에서 버전 5로 마이그레이션할 때 필요한 변경 사항을 중점적으로 설명합니다. Hibernate ORM 4와 Hibernate ORM 5 간에 구현된 변경 사항에 대한 자세한 내용은 Hibernate ORM 5.0 마이그레이션 가이드를 참조하십시오.
제거 및 더 이상 사용되지 않는 클래스
다음의 더 이상 사용되지 않는 클래스는 Hibernate ORM 5에서 제거되었습니다.
클래스 및 패키지에 대한 기타 변경 사항
-
org.hibernate.integrator.spi.Integrator인터페이스가 부트스트랩의 계정으로 변경되었습니다. -
새 패키지
org.hibernate.engine.jdbc.env.spi가 생성되었습니다.org.hibernate.engine.jdbc.env.spi.JdbcEnvironment인터페이스가 포함되어 있으며 이는org.hibernate.engine.jdbc.spi.JdbcServices인터페이스에서 추출되었습니다. -
org.hibernate.boot.model.relational.ExportableProducer인터페이스가 도입되어org.hibernate.id.PersistentIdentifierGenerator구현에 영향을 미칩니다. -
org.hibernate.id.Configurable의 서명은org.hibernate.dialect.Dialect.Dialect가 아닌org.hibernate.service.ServiceRegistry를 수락하도록 변경되었습니다. -
org.hibernate.metamodel.spi.TypeContributor인터페이스가org.hibernate.boot.model.TypeContributor로 마이그레이션되었습니다. -
org.hibernate.metamodel.spi.TypeContributions인터페이스가org.hibernate.boot.model.TypeContributions로 마이그레이션되었습니다.
유형 처리
-
built-in
org.hibernate.type.descriptor.sql.SqlTypeDescriptor구현은org.hibernate.type.descriptor.sql.SqlTypeDescriptorRegistry로 더 이상 자동 등록되지 않습니다. 내장 구현을 확장하고 해당 동작을 사용하는 사용자 지정 CryostatTypeDescriptor구현을 사용하는 애플리케이션은 CryostatTypeDescriptorRegistry.addDescriptor()를 직접 호출하도록 업데이트해야 합니다. -
생성된 UUID로 정의된 ID의 경우, 일부 데이터베이스는 비교가 제대로 작동하려면
BINARY)를 명시적으로 설정해야 합니다.(16)를 생성하기 위해 @#187(length=16 -
javax.persistence.EnumType.STRING이름 매핑 .의 경우hbm.xml에 정의된EnumType매핑useNamed(true)설정을 사용하거나12의 VARCHAR 값을 지정하여 명시적으로 지정해야 합니다.
트랜잭션 관리
-
트랜잭션 SPI는 Hibernate ORM 5에서 중요한 역할을 했습니다. Hibernate ORM 4.3에서는
org.hibernate.TransactionAPI를 사용하여 다양한 백엔드 트랜잭션 전략에 직접 액세스했습니다. Hibernate ORM 5에는 간접 수준이 도입되었습니다. 백엔드에서org.hibernate.Transaction구현은 이제 백엔드 전략에 따라 지정된 세션의 트랜잭션 컨텍스트를 나타내는org.hibernate.resource.TransactionCoordinator와 통신합니다. 이는 개발자에게 직접적인 영향을 미치지 않지만 부트스트랩 구성에 영향을 미칠 수 있습니다. 이전 애플리케이션에서는 더 이상 사용되지 않는hibernate. Cryostat.factory_class속성을 지정하고org.hibernate.engine.spi.TransactionFactoryFQN(완전 자격을 갖춘 이름)을 참조했습니다. Hibernate ORM 5를 사용하면hibernate. Cryostat.coordinator_class설정을 지정하고org.hibernate.resource.TransactionCoordinatorBuilder를 참조합니다. 자세한 내용은org.hibernate.cfg.AvailableSettings.TRANSACTION_COORD CryostatTOR_STRATEGY를 참조하십시오. 이제 다음과 같은 짧은 이름이 인식됩니다.
-
JDBC: JDBC
java.sql.Connection을 사용하여 트랜잭션을 관리합니다. 이는 비Jakarta 지속성 트랜잭션의 기본값입니다. JTA : Jakarta 트랜잭션을 사용하여 트랜잭션을 관리합니다.
중요Jakarta Persistence 애플리케이션에서
hibernate. Cryostat.coordinator_class속성에 대한 설정을 제공하지 않으면 Hibernate는 지속성 유닛의 트랜잭션 유형에 따라 적절한 트랜잭션 코디네이터를 자동으로 빌드합니다.비Jakarta 지속성 애플리케이션에서
hibernate. Cryostat.coordinator_class 속성에 대한 설정을 제공하지 않으면 Hibernate는 기본적으로 트랜잭션을 관리하기 위해jdbc로 설정됩니다. 이 기본값은 애플리케이션에서 실제로 Jakarta 트랜잭션을 사용하는 경우 문제가 발생합니다. Jakarta트랜잭션을 사용하는 Jakarta Persistence 애플리케이션은 hibernate. Cryostat.coordinator_class속성 값을jta로 명시적으로 설정하거나 Jakarta 트랜잭션과 적절하게 조정하는org.hibernate.resource.TransactionCoordinatorBuilder 를 제공해야 합니다.
-
JDBC: JDBC
기타 Hibernate ORM 5 변경
-
cfg.xml파일은 다시 완전히 구문 분석되고 이벤트, 보안 및 기타 기능과 통합됩니다. -
EntityManagerFactory를 사용하여cfg.xml에서 로드된 속성은 이전에hibernate이름을 접두사로 지정하지 않았습니다. 이는 이제 일관성 있게 되었습니다. - 구성은 더 이상 직렬화할 수 없습니다.
-
org.hibernate.dialect.Dialect.getQuerySequencesString()메서드는 카탈로그, 스키마 및 증가 값을 검색합니다. -
audit
Configuration수정자가org.hibernate.envers.boot.internal.EnversService에서 제거되었습니다. -
더 이상 사용되지 않는 audit
Configuration을 제거하고 새EnversService를 사용하도록 auditStrategy메서드 매개변수가 변경되었습니다. -
org.hibernate.hql.spi패키지 및 하위 패키지의 다양한 클래스와 인터페이스가 새org.hibernate.hql.spi.id패키지로 이동되었습니다. 여기에는MultiTableBulkIdStrategy클래스와AbstractTableBasedBulkIdHandler,TableBasedDeleteHandlerImpl및TableBasedUpdateHandlerImpl인터페이스 및 해당 하위 클래스가 포함됩니다. - 속성 액세스 계약에 대한 완전한 구현이 있었습니다.
-
유효한
hibernate.cache.default_concurrency_strategy 설정 값은메서드를 사용하여 정의됩니다. 이는 다른 Hibernate 설정과 더 일치합니다.org.hibernate.cache.spi.access.AccessType() 메서드 대신 org.hibernate.cache.spi.access.spi.access.AccessType enum 상수 대신 org.hibernate.cache.AccessType()
7.8.8. Hibernate ORM 5.0에서 Hibernate ORM 5.1로 마이그레이션 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP 7.1에는 Hibernate ORM 5.1이 포함되어 있습니다. 이 섹션에서는 Hibernate ORM 버전 5.0에서 버전 5.1로 마이그레이션할 때 필요한 차이점과 변경 사항을 중점적으로 설명합니다.
Hibernate ORM 5.1 기능
이 Hibernate 릴리스에는 성능 개선 및 버그 수정이 포함되어 있습니다. 자세한 내용은 7.1.0용 JBoss EAP 릴리스 노트 의 Hibernate ORM 5.1 기능을 참조하십시오. Hibernate ORM 5.0과 Hibernate ORM 5.1 간에 구현된 변경 사항에 대한 자세한 내용은 Hibernate ORM 5.1 마이그레이션 가이드를 참조하십시오.
스키마 관리 툴링 변경
JBoss EAP 7의 스키마 관리 툴 변경
Hibernate ORM 5.1의 스키마 관리 툴링 변경 사항은 다음 영역에 중점을 두고 있습니다.
-
hbm2ddl.auto의 처리와 hibernate의 Jakarta Persistence스키마-generation에 대한 지원을 통합합니다. - NoSQL 데이터 저장소에 대한 Jakarta 지속성 지원을 제공하는 지속성 엔진인 Hibernate OGM을 효과적으로 대체하기 위해 JDBC 문제를 SPI에서 제거합니다.
스키마 관리 툴링 변경은 다음 클래스를 직접 사용하는 애플리케이션의 마이그레이션 문제일 뿐입니다.
-
org.hibernate.tool.hbm2ddl.SchemaExport -
org.hibernate.tool.hbm2ddl.SchemaUpdate -
org.hibernate.tool.hbm2ddl.SchemaValidator -
org.hibernate.tool.schema.spi.SchemaManagementTool또는 해당 대표
JBoss EAP 7.1의 스키마 관리 툴 변경
JBoss EAP 7.1에 포함된 Hibernate ORM 5.1.10에는 SchemaMigrator 및 SchemaValidator 성능을 개선하는 데이터베이스 테이블을 검색하는 전략이 도입되었습니다. 이 전략은 단일 java.sql.DatabaseMetaData#getTables(String, string, String, String, String[]) 호출을 실행하여 각 javax.persistence.Entity 에 매핑된 데이터베이스 테이블이 있는지 확인합니다. 이는 기본 전략이며 hibernate.hbm2ddl.jdbc_metadata_extraction_strategy=grouped 속성 설정을 사용합니다. 이 전략을 사용하려면 hibernate.default_schema 및/또는 hibernate.default_catalog 가 필요할 수 있습니다.
java.sql.DatabaseMetaData#getTables(String, String, String, String, String[]) 호출의 이전 전략을 사용하려면 hibernate 속성 설정을 사용합니다.
. hbm2ddl.jdbc_metadata_extraction_strategy=individually
7.8.9. Hibernate ORM 5.1 및 Hibernate ORM 5.2에서 Hibernate ORM 5.3으로 마이그레이션 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP 7.4에는 Hibernate ORM 5.3이 포함되어 있습니다. 이 섹션에서는 Hibernate ORM 5.1에서 Hibernate ORM 5.2로 마이그레이션한 다음 Hibernate ORM 5.3으로 마이그레이션할 때 필요한 몇 가지 변경 사항을 중점적으로 설명합니다.
Hibernate ORM 5.2 기능
Hibernate ORM 5.2는 Java 8 JDK를 사용하여 구축되었으며 런타임 시 Java 8 JRE가 필요합니다. 다음은 이 릴리스에서 수행된 일부 변경 사항 목록입니다.
-
hibernate-java8모듈이hibernate-core로 병합되었으며 Java 8 날짜/시간 데이터 유형이 기본적으로 지원됩니다. -
hibernate-entitymanager모듈이hibernate-core로 병합되었습니다.HibernateEntityManager및HibernateEntityManagerFactory는 더 이상 사용되지 않습니다. -
세션,StatelessSession및SessionFactory클래스 계층 구조는 더 이상 사용되지 않는 클래스를 제거하고 Jakarta Persistence Metamodel API와 더 잘 일치하도록 리팩터링되었습니다. -
org.hibernate.persister및org.hibernate.튜플패키지의 SPI가 변경되었습니다. 해당 SPI를 사용하는 모든 사용자 정의 클래스를 검토하고 업데이트해야 합니다. -
LimitHandler변경으로 인해 기본적으로false로 설정된 새로운hibernate.legacy_limit_handler설정이 도입되어 레거시 Hibernate 4.3 제한 처리기 동작을 사용하도록 설계되었습니다. 이는 제한된 방언 목록에 영향을 미칩니다. -
SchemaMigrator및SchemaValidator성능을 개선하는 데이터베이스 테이블을 검색하는 새로운 전략이 도입되었습니다. -
이 릴리스에서는 PostgreSQL81Dialect 및 해당 하위 클래스를 사용할 때
@Lob주석이 추가된String,character속성의[]및 character[]CLOB값이 변경되어 있습니다. -
@TableGenerator및@SequenceGenerator이름의 범위가 전역에서 로컬로 변경되었습니다.
Hibernate 5.2에서 구현된 변경 사항의 전체 목록은 Hibernate ORM 5.2 마이그레이션 가이드를 참조하십시오.
Hibernate ORM 5.3 기능
Hibernate ORM 5.3에서는 자카르타 지속성 2.2 사양에 대한 지원이 추가되었습니다. 이 릴리스에는 기타 개선 사항과 함께 이 사양을 준수하기 위한 변경 사항이 포함되어 있습니다. 다음은 이러한 변경 사항 중 일부 목록입니다.
위치 쿼리 매개변수 처리에 대한 변경으로 인해 다음과 같은 변경 사항이 발생했습니다.
- HQL/JPQL 쿼리에서 JDBC 스타일 매개변수 선언을 제거합니다.
- Jakarta Persistence 위치 매개 변수는 이름이 지정된 매개변수처럼 더 많이 작동합니다.
-
네이티브 쿼리의 JDBC 스타일 매개 변수 선언은 Jakarta 지속성과 일치하도록 0 기반 매개 변수 바인딩 대신 1부터 시작합니다.
hibernate.query.sql.jdbc_style_params_base속성을true로 설정하여 0 기반 바인딩으로 되돌릴 수 있습니다.
-
자카르타 지속성 사양을 준수하기 위해
@TableGenerator저장된 값에 의해 저장된 시퀀스 값은 마지막으로 생성된 값입니다. 이전에는 Hibernate가 다음 시퀀스 값을 저장했습니다.hibernate.id.generator.stored_last_used속성을 사용하여 레거시 Hibernate 동작을 활성화할 수 있습니다.@TableGenerator를 사용하고 Hibernate 5.3으로 마이그레이션하는 기존 애플리케이션은hibernate.id.generator.stored_last_used 구성속성을false로 설정해야 합니다. -
org.hibernate.query.QueryParameter클래스의getType()메서드는getHibernateType()로 이름이 변경되었습니다. - Hibernate의 두 번째 수준 캐시 SPI는 다양한 캐싱 공급자의 요구 사항을 보다 효과적으로 충족하도록 설계되었습니다. 자세한 내용은 HHH-11356 에서 확인할 수 있습니다.
- HHH-11356 에 대한 변경 사항은 Hibernate 통계 시스템에 영향을 미치는 소비자의 변경 사항도 필요했습니다.
-
일부 메서드는 일시적으로
org.hibernate.Query클래스에 추가되어 네이티브 애플리케이션을 Hibernate ORM 5.1에서 5.3으로 보다 쉽게 마이그레이션하고 Hibernate 5.1 pagination 동작을 유지 관리했습니다. 이러한 방법은 더 이상 사용되지 않으며 향후 Hibernate 버전에서 이식하려면 Jakarta 지속성 방법을 사용하도록 애플리케이션을 업데이트해야 합니다. -
Hibernate 2nd-level 캐시 공급자로 Infinispan 사용 지원이 Infinispan 프로젝트로 이동되었습니다. 그 결과
hibernate-infinispan모듈이 삭제되었습니다. -
org.hibernate.tool.enhance.EnhancementTask의 API가 변경되었습니다.addFileset()메서드는setBase()및setDir()메서드를 대신해서 삭제되었습니다. 자세한 내용은 HHH-11795 에서 확인할 수 있습니다. - Hibernate 4.3에 도입된 버그로 인해 명시적으로 lazy로 매핑되는 경우에도 포함 가능한 컬렉션 요소 및 복합 ID에 대한 다대일 연관이 발생했습니다. Hibernate 5.3.2에서는 이 버그가 수정되었습니다. 결과적으로 이러한 연관은 매핑에 의해 지정된 대로 가져옵니다. 자세한 내용은 HHH-12687 에서 확인할 수 있습니다.
-
이번 릴리스에서는 Jakarta Persistence 및 Hibernate 이벤트 리스너의 기본 구현이 통합되었습니다. 결과적으로
JpaIntegrator클래스는 사용되지 않습니다.org.hibernate.jpa.event.spi.JpaIntegrator를 확장하는 클래스는org.hibernate.integrator.spi.Integrator인터페이스를 구현하기 위해 이러한 클래스를 변경해야 합니다. 자세한 내용은 HHH-11264 에서 확인할 수 있습니다. -
org.hibernate.persister패키지의 SPI가 변경되었습니다. 해당 SPI를 사용하는 모든 사용자 정의 클래스를 검토하고 업데이트해야 합니다.
Hibernate 5.3에서 구현된 이러한 변경 사항 및 기타 변경 사항의 전체 목록은 Hibernate ORM 5.3 마이그레이션 가이드를 참조하십시오.
Hibernate 5.1과 Hibernate 5.3 간의 변경 사항 예외 처리
Hibernate 5.2 및 5.3에서는 Hibernate의 네이티브 부트스트랩을 사용하여 구축된 SessionFactory 에 대한 예외 처리, Jakarta Persistence 사양에 따라 HibernateException 을 래핑하거나 변환합니다. 이 동작에 대한 유일한 예외는 작업이 Hibernate에 특정한 경우입니다(예: Session.save() 또는 Session.saveOrUpdate() ).
Hibernate 5.3.3에서는 hibernate.native_exception_handling_51_compliance 속성이 추가되었습니다. 이 속성은 Hibernate의 네이티브 부트스트랩을 사용하여 구축된 SessionFactory 에 대한 예외 처리가 Hibernate ORM 5.1의 기본 예외 처리와 동일하게 작동하는지 여부를 나타냅니다. true 로 설정하면HibernateException 이 Jakarta Persistence 사양에 따라 래핑되거나 변환되지 않습니다. 이 설정은 Jakarta Persistence 부트스트랩을 사용하여 빌드된 SessionFactory 에서 무시됩니다.
호환성 변환기
JBoss EAP 7.4에는 더 이상 Hibernate ORM 5.1과 호환되지 않는 Hibernate ORM 5.3 API 방법을 처리하는 호환성 변형기가 포함되어 있습니다. 변환기는 Hibernate ORM 5.1을 사용하여 빌드된 애플리케이션이 JBoss EAP 7.4의 Hibernate 5.3과 동일한 동작을 표시할 수 있도록 하는 임시 조치입니다. 임시 솔루션이므로 이러한 메서드 호출을 권장되는 Jakarta 지속성 메서드 호출로 교체해야 합니다.
다음 방법 중 하나로 변환기를 활성화할 수 있습니다.
-
Hibernate51CompatibilityTransformer시스템 속성을true로 설정하여 모든 애플리케이션에 대해 변환기를 전역적으로 활성화할 수 있습니다. jboss-deployment-structure.xml파일을 사용하여 애플리케이션 수준에서 변환자를 활성화할 수 있습니다.<jboss-deployment-structure> <deployment> <transformers> <transformer class="org.jboss.as.hibernate.Hibernate51CompatibilityTransformer"/> </transformers> </deployment> <sub-deployment name="main.war"> <transformers> <transformer class="org.jboss.as.hibernate.Hibernate51CompatibilityTransformer"/> </transformers> </sub-deployment> </jboss-deployment-structure>
다음 표에는 변환된 Hibernate 5.1 방법과 다음과 같은 Hibernate 5.3 방법이 나열되어 있습니다.
| Hibernate 5.1 참조 또는 방법 | Hibernate 5.3 참조 또는 방법으로 변환 |
|---|---|