> Java > java지도 시간 > 뷰 전략에서 Hibernate의 공개 세션을 사용해야 합니까?

뷰 전략에서 Hibernate의 공개 세션을 사용해야 합니까?

Linda Hamilton
풀어 주다: 2024-12-29 04:44:10
원래의
171명이 탐색했습니다.

Should I Use Hibernate's Open Session in View Strategy?

Hibernate Open Session in View Practice

개요

Hibernate의 OSIV(Open Session in View) 전략은 다음과 같습니다. 특히 다중 JVM 환경과 즉각적인 트랜잭션 커밋이 필요한 경우에는 몇 가지 단점이 있습니다. 단일 JVM 애플리케이션에서 제공하는 편리성에도 불구하고 전문가들은 이 사용을 권장하지 않습니다.

OSIV 관련 문제

OSIV의 주요 관심사는 데이터 검색에 대한 비정통적인 접근 방식에 있습니다. UI 렌더링 중에 지속성 컨텍스트를 열어두어 요청 시 지연 연결을 초기화할 수 있습니다. 이로 인해 여러 가지 단점이 발생합니다.

  • 렌더링 시 자동 커밋: 서비스 계층 트랜잭션이 완료된 후 UI 렌더링에 의해 트리거된 모든 후속 문은 자동 커밋 모드에서 실행되어 불필요한 데이터베이스 서버에 로드됩니다.
  • 모호한 문제: 서비스 계층과 UI 계층 간의 문제 구분이 ​​모호해집니다. 테스트 및 격리가 더욱 어려워집니다.
  • N 1 쿼리의 가능성: UI 계층 제한으로 인해 N 1 쿼리 문제가 발생하여 성능이 저하될 수 있습니다.
  • 연결 임대 문제: OSIV는 UI 렌더링 전반에 걸쳐 데이터베이스 연결을 유지하여 트랜잭션 처리량을 제한하고 잠재적으로 풀을 유발할 수 있습니다. 혼잡.

LazyLoadException 방지

OSIV에 의존하는 대신 LazyLoadException을 방지하기 위해 대체 전략을 사용할 수 있습니다.

  • 연결 가져오기: 서비스 중에 연결을 명시적으로 초기화합니다. 메서드 호출.
  • 읽기 전용 가져오기: 예기치 않은 프록시를 방지하려면 연결 목록을 읽기 전용으로 표시합니다.
  • 일괄 가져오기: @BatchSize를 사용합니다. 및 FetchMode.SUBSELECT를 사용하여 가져오기를 최적화합니다.
  • 데이터 액세스 계층 (DAL) 쿼리: 데이터 검색 요구 사항을 정확하게 정의하는 사용자 정의 DAL 쿼리를 작성합니다.

Spring Boot에서 OSIV 비활성화

Spring Boot, OSIV 기본적으로 활성화되어 있습니다. 이를 비활성화하려면 application.properties 파일에 다음 행을 추가하십시오.

spring.jpa.open-in-view=false
로그인 후 복사

이렇게 하면 OSIV가 비활성화되어 개발자가 LazyLoadExceptions를 보다 적절한 방식으로 처리할 수 있습니다.

위 내용은 뷰 전략에서 Hibernate의 공개 세션을 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿