복붙노트

[SPRING] org.hibernate.LazyInitializationException : 프록시를 초기화 할 수 없습니다 - 세션 없음

SPRING

org.hibernate.LazyInitializationException : 프록시를 초기화 할 수 없습니다 - 세션 없음

내 웹 응용 프로그램이로드 밸런서가 관리하는 실제 서버가 2 대 있습니다. 나는 항상 얻는다 -

org.hibernate.LazyInitializationException : 프록시를 초기화 할 수 없습니다 - 세션 없음

서버 중 하나가 적중해도 다른 서버는 문제없이 원활하게 실행됩니다. 응용 프로그램에서 로컬 관리 캐시 저장소를 활성화하고 관리합니다. 이 예외는 한 테이블에서 하나의 특정 열에 액세스하려는 경우에만 발생합니다. 나머지 작업은 어떤 서버가 공격 받았는지에 관계없이 절대적으로 작동합니다.

lazy = false를 만드는 것은 테이블의 행 수가 상당히 많기 때문에 성능 문제가됩니다. 그런데 우리는 load (object) 대신에 get (object)를 세션에서 사용합니다.

해결법

  1. ==============================

    1.필자가 제공 한 태그에서 스프링 프레임 워크를 사용하여이 문제에 부딪쳤다는 것을 추론합니다. Spring 데이터 org.springframework.data.jpa.repository.JpaRepository를 사용하는 동안 동일한 LazyInitializationException을 만났다.

    필자가 제공 한 태그에서 스프링 프레임 워크를 사용하여이 문제에 부딪쳤다는 것을 추론합니다. Spring 데이터 org.springframework.data.jpa.repository.JpaRepository를 사용하는 동안 동일한 LazyInitializationException을 만났다.

    @Transactional을 사용하여 데이터베이스에서 데이터를 검색하기 위해 Hibernate를 간접적으로 사용하는 메소드에 주석을 달아 문제를 해결했습니다.

  2. ==============================

    2.액세스하려고하는 열이 엔티티에서 일종의 연관 (OneToMany, ManyToOne 등)으로 구성되어 있고 DAO에서 해당 연관을 채우지 않는 것 같습니다. 그런 다음, 당신이 그 컬럼 (코드에서 Hibernate Session이 존재하지 않는 위치)에 접근하려고 시도 할 때,이 컬럼은 채워지지 않는다. Hibernate는 그것을로드하려고 시도한다.

    액세스하려고하는 열이 엔티티에서 일종의 연관 (OneToMany, ManyToOne 등)으로 구성되어 있고 DAO에서 해당 연관을 채우지 않는 것 같습니다. 그런 다음, 당신이 그 컬럼 (코드에서 Hibernate Session이 존재하지 않는 위치)에 접근하려고 시도 할 때,이 컬럼은 채워지지 않는다. Hibernate는 그것을로드하려고 시도한다.

    실제로 그 협회에서 데이터를 사용하고 있기 때문에 EAGER는 실제로하고 싶은 것처럼 들립니다. 그리고 그 테이블이 너무 큰 경우, 테이블에 대한 쿼리가 효율적이되도록 인덱스를 조사해야합니다.

  3. ==============================

    3.귀하의 개체가 분리됩니다. 액세스하기 전에 현재 세션에 다시 연결해야합니다.

    귀하의 개체가 분리됩니다. 액세스하기 전에 현재 세션에 다시 연결해야합니다.

    session.update(object);
    

    또한 거래 내에서 액세스해야합니다.

    문제 / 해결 방법에 대한 자세한 내용은 여기를 참조하십시오.

  4. ==============================

    4.그것은 연관성 또는 속성입니까? 속성 인 경우 서버 중 하나가 비 계측 버전을 실행하고있는 것일 수 있습니다.

    그것은 연관성 또는 속성입니까? 속성 인 경우 서버 중 하나가 비 계측 버전을 실행하고있는 것일 수 있습니다.

    Lazy attribute fetching: an attribute or single valued association is fetched when the instance variable is accessed. This approach requires buildtime bytecode instrumentation and is rarely necessary.
    
  5. from https://stackoverflow.com/questions/7654818/org-hibernate-lazyinitializationexception-could-not-initialize-proxy-no-sessi by cc-by-sa and MIT license