[SPRING] 최대 절전 모드 ManyToOne FetchType.LAZY가 작동하지 않습니까?
SPRING최대 절전 모드 ManyToOne FetchType.LAZY가 작동하지 않습니까?
나는 봄 4.1.4.RELEASE + 최대 절전 모드 4.3.6을 사용하고 있습니다. 최종, 여기 엔티티 코드가 있습니다 :
public class BaseEntity implements Serializable {
}
public class MarketInfo extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private int id;
@Column(name = "market_id", unique = true, length = 15)
private String marketId;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "market")
private List<MarketChannelGroup> channelGroups;
public List<MarketChannelGroup> getChannelGroups() {
return channelGroups;
}
public void setChannelGroups(List<MarketChannelGroup> channelGroups) {
this.channelGroups = channelGroups;
}
...
}
public class MarketChannelGroup extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private int id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "market_id", referencedColumnName = "market_id")
private MarketInfo market;
...
}
내 테스트에서 나는 getChannelGroups ()를 호출하면 각 MarketChannelGroup 내부의 MarketInfo가 가져 오지만 (이 경우 getChannelGroups (), channelGroups가 null 인 경우) MarketInfo의 channelGroups가 제대로 작동하는지 확인할 수 있습니다. 시장의 가져 오기 모드가 FetchType.LAZY이므로 발생합니다.
콘솔에서 getter를 호출하면 다음과 같은 최대 절전 모드 로그가 표시됩니다.
Hibernate: select channelgro0_.market_id as market_i5_12_1_, channelgro0_.id as id1_9_1_, channelgro0_.id as id1_9_0_, channelgro0_.channel_group_id as channel_2_9_0_, channelgro0_.channel_group_name as channel_3_9_0_, channelgro0_.channel_group_type as channel_4_9_0_, channelgro0_.market_id as market_i5_9_0_ from market_channel_group channelgro0_ where channelgro0_.market_id=?
Hibernate: select marketinfo0_.id as id1_12_0_, marketinfo0_.enable_flag as enable_f2_12_0_, marketinfo0_.enable_time as enable_t3_12_0_, marketinfo0_.market_id as market_i4_12_0_, marketinfo0_.market_name as market_n5_12_0_, marketinfo0_.stb_count as stb_coun6_12_0_ from market_info marketinfo0_ where marketinfo0_.market_id=?
Hibernate: select marketinfo0_.id as id1_12_0_, marketinfo0_.enable_flag as enable_f2_12_0_, marketinfo0_.enable_time as enable_t3_12_0_, marketinfo0_.market_id as market_i4_12_0_, marketinfo0_.market_name as market_n5_12_0_, marketinfo0_.stb_count as stb_coun6_12_0_ from market_info marketinfo0_ where marketinfo0_.market_id=?
Hibernate: select marketinfo0_.id as id1_12_0_, marketinfo0_.enable_flag as enable_f2_12_0_, marketinfo0_.enable_time as enable_t3_12_0_, marketinfo0_.market_id as market_i4_12_0_, marketinfo0_.market_name as market_n5_12_0_, marketinfo0_.stb_count as stb_coun6_12_0_ from market_info marketinfo0_ where marketinfo0_.market_id=?
아무도 도와 줄 수 있니?
최신 정보 ManyToOne 주석에 대한 선택적 방법이 없으므로 OneToOne의 솔루션이 내 경우에는 작동하지 않습니다.
해결법
-
==============================
1.다음과 같이 @OneToMany 주석을 선언에서 getter 메소드로 이동하십시오.
다음과 같이 @OneToMany 주석을 선언에서 getter 메소드로 이동하십시오.
private List<MarketChannelGroup> channelGroups; @OneToMany(fetch = FetchType.LAZY, mappedBy = "market") public List<MarketChannelGroup> getChannelGroups() { return channelGroups; }
-
==============================
2.구성 아카이브는 어떻게됩니까? OpenEntityManagerInViewFilter 필터를 사용하고 있는지 확인하십시오. 만약 당신이 그것을 사용한다면, 당신은 항상 Lazy getChannelGroups () 메소드를 호출한다. 최대 절전 모드는 각 요소 내부에서 가져올 것이다.
구성 아카이브는 어떻게됩니까? OpenEntityManagerInViewFilter 필터를 사용하고 있는지 확인하십시오. 만약 당신이 그것을 사용한다면, 당신은 항상 Lazy getChannelGroups () 메소드를 호출한다. 최대 절전 모드는 각 요소 내부에서 가져올 것이다.
-
==============================
3.@id가 getter에 있으면 getTo에 oneToMany 주석을 사용해야합니다. 게으른 작동하지만 당신이나 일부 프레임 워크가 그 transction에 게으른 속성을 얻을 경우 get 메서드를 선택하십시오.
@id가 getter에 있으면 getTo에 oneToMany 주석을 사용해야합니다. 게으른 작동하지만 당신이나 일부 프레임 워크가 그 transction에 게으른 속성을 얻을 경우 get 메서드를 선택하십시오.
from https://stackoverflow.com/questions/39748211/hibernate-manytoone-fetchtype-lazy-is-not-working by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 봄 부팅 및 봄 보안 다중 로그인 페이지 (0) | 2019.05.03 |
---|---|
[SPRING] SecurityContext의 Authentication 개체가 여러 스레드에서 공유되지 않는 이유는 무엇입니까? (0) | 2019.05.03 |
[SPRING] apache POI Excel 통합 문서에 워터 마크 추가 (0) | 2019.05.03 |
[SPRING] 같은 bean에서 bean을 autowire하는 법 (0) | 2019.05.03 |
[SPRING] 페이스 북을 통한 로그인 후 스프링 보안 설정 쿠키 저장 (0) | 2019.05.03 |