[SPRING] Letchy를 가져 오지 않는 FetchType.LAZY가있는 ManyToOne을 최대 절전 모드로 만듭니다.
SPRINGLetchy를 가져 오지 않는 FetchType.LAZY가있는 ManyToOne을 최대 절전 모드로 만듭니다.
봄에 최대 절전 모드를 사용하고 있습니다.
이런 모델 클래스가 있습니다.
@Entity
@Table(name = "forumtopic")
public final class Forumtopic extends AbstractUserTracking implements
java.io.Serializable {
/**SNIP **/
private Forumcategory forumcategory;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "FkForumcategoryId", nullable = false)
public Forumcategory getForumcategory() {
return this.forumcategory;
}
public void setForumcategory(final Forumcategory forumcategory) {
this.forumcategory = forumcategory;
}
}
일반적으로 작동하지만 카테고리는 게으르지 않지만 ForumEntry가로드 된 후 열심히로드됩니다.
최대 절전 모드 : 고르다 forumtopic0_.PkId as PkId19_0_, forumtopic0_.CreateDate as CreateDate19_0_, forumtopic0_.FkCreateUserId as FkCreate3_19_0_, forumtopic0_.FkLastUserId as FkLastUs4_19_0_, LastChange19_0_으로 마지막 변경, 포럼 순위 0_.FkForumcategoryId로서 FkForum10_19_0_, forumtopic0_.PublishCategory as PublishC6_19_0_, State19_0_으로 상태, forumtopic0_.Text as Text19_0_, Topic19_0_으로 forumtopic0_.Topic, FtpUserId19_0_으로 포럼 토크 0_.FkTpUserId ...에서 포럼 토픽 0_ 어디에 forumtopic0_.PkId =? 최대 절전 모드 : 고르다 forumcateg0_.PkId as PkId17_0_, forumcateg0_.CreateDate as CreateDate17_0_, forumcateg0_ 이름을 Name17_0_으로, forumcateg0_.FkRequestId as FkReques4_17_0_, FkTpUserId17_0_으로 포럼 등급 0_.FkTpUserId ...에서 forumcategory forumcateg0_ 어디에 forumcateg0_.PkId =?
해결법
-
==============================
1.나는 그것이 당신의 클래스가 final로 선언되었다는 사실에 기인한다고 생각한다. 그러므로 Hibernate는 그것들을위한 게으른 프록시를 생성 할 수 없다. 클래스 선언에서 final을 제거하십시오.
나는 그것이 당신의 클래스가 final로 선언되었다는 사실에 기인한다고 생각한다. 그러므로 Hibernate는 그것들을위한 게으른 프록시를 생성 할 수 없다. 클래스 선언에서 final을 제거하십시오.
-
==============================
2.ForumTopic을 반환 한 후 트랜잭션 / 세션이 닫힌 것 같습니다. 따라서 분리 된 개체가됩니다. getForumCategory를 수행하려고하면 조작을 수행 할 세션이 없습니다. 같은 세션에서 ForumCategory를 프리 페치 할 수 있습니다.
ForumTopic을 반환 한 후 트랜잭션 / 세션이 닫힌 것 같습니다. 따라서 분리 된 개체가됩니다. getForumCategory를 수행하려고하면 조작을 수행 할 세션이 없습니다. 같은 세션에서 ForumCategory를 프리 페치 할 수 있습니다.
귀하의 getForumTopic에서 목록을 반환하기 전에 (getAllForumTopic이 있다고 가정)
public List<ForumTopic> getAllForumTopic() { <snip> List<ForumTopic> topics = <SNIP: get the list of ForumTopic> for(ForumTopic topic: topics) topic.getForumCategory() return topics; }
동일한 세션에서 ForumCategory를 가져옵니다. 그렇지 않으면 getAllForumTopic의 호출 함수에서 트랜잭션을 작성하고 getForumCategory를 호출해야하는 곳에서 동일한 트랜잭션을 사용해야합니다.
from https://stackoverflow.com/questions/5594297/hibernate-manytoone-with-fetchtype-lazy-not-fetching-lazy by cc-by-sa and MIT license