2009-07-03 4 views

답변

1
  1. 클래스 멤버는 개인적이어야합니다!
  2. 당신의 객체가 Hibernate Session에 붙어 있다면, 당신은 프록시에서 작업하고있다. 따라서 클래스 멤버에 직접 액세스하려는 경우 (나쁜 경우) 객체를 먼저 분리해야합니다.
+0

클래스 멤버가 항상 비공개이어야한다는 것을 의미한다고 가정하고 있지만 동의합니다.하지만이 코드를 상속 받았으며 JSP에서 수천 개의 참조를 변경해야하므로 발생하지 않을 것입니다. – Jesse

+0

좋아, 난 엉망진창이 너의 잘못이 아니길 바래.). 하지만 물건을 분리하려고 했습니까? 이러한 아키텍처를 기반으로 OpenSessionInViewFilter (또는 (anti -) "패턴"))이 사용되므로 객체가 요청 내에서 분리되지 않습니다. 실제 객체는 프록시이고 멤버 및 메소드에 대한 액세스는 지속성 관리자의 전략 또는 구현에 의존한다는 점을 명심해야합니다. 그리고 Hibernate는 멤버에게 직접 접근하지 않는 것과 같은 몇 가지 규칙을 따른다고 가정한다. – cafebabe

+0

실제로 아키텍처를 수정하려고합니다. 객체를 가져온 후에 evoked하려고 시도했지만 아무 것도 액세스하려고 시도한 후에 다음과 같은 예외가 발생했습니다. org.hibernate.LazyInitializationException : 프록시를 초기화 할 수 없습니다 - 세션 없음 – Jesse

1

게으른 페치 문제와 비슷합니다. 퍼블릭 레퍼런스는 당신이 그것을 직접 접근하려고 시도 할 때 null이지만, "get"으로 그것을 할 때, Hibernate는 데이터베이스를 호출하고 그 인스턴스를 당신에게 수화시키는 것을 알고있다.

+0

그게 나에게 들리는 것 같아. 내가 .getB()를 호출하고, a.b를 호출하면, 여전히 a.b를 호출 할 수 없다. – Jesse

0

b 필드가 일시적이기 때문에.

일시적인 현상이 필요합니까? 제거해보십시오.

+0

일시적이어야하는 유일한 필요성은 내가 데이터베이스에서 해당 링크를 원하지 않는다는 것입니다. – Jesse

관련 문제