나는 국가, 주 및 교외 인 3 개의 클래스가 있습니다. 각 국가마다 많은 주들이 있으며 각 주마다 많은 교외 지역이 있습니다.FetchType.Eager를 사용하여 값을 검색하는 방법은 무엇입니까?
내 최대 절전 모드는 4.2.1 최종입니다.
상태의 FetchType이 EAGER로 정의되었지만 각 상태의 교외를 검색 할 수 없다는 것이 문제입니다.
나는 이것을 answer에서도 읽습니다. 언제든지 모든 국가의 광고 교외 지역을 검색하고 싶지는 않습니다. 그래서 나는 가정
교외을 미국
@Entity
public class States {
private long id;
private String name;
private List<Suburbs> suburbs;
...
public States(){
this.suburbs = new ArrayList();
}
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
public List<Suburbs> getSuburbs() {
return suburbs;
}
}
기준을 사용하기보다는
@LazyCollection (LazyCollectionOption.FALSE)
나라
@Entity
public class Country {
private List<States> states;
...
public Country(){
this.states = new ArrayList();
}
@OneToMany (cascade = CascadeType.ALL)
public List<States> getStates() {
return states;
}
....
}
를 사용하여 가져 오는 전략을 재정의해야
@Entity
public class Suburbs {
private long id;
private String name;
....
}
코드
Criteria criteria = session.createCriteria(Country.class, "country")
.createAlias("country.states", "states");
ProjectionList pl = Projections.projectionList();
pl.add(Projections.property("states.id").as("id"));
pl.add(Projections.property("states.name").as("name"));
criteria.setProjection(pl);
criteria.setResultTransformer(new
AliasToBeanResultTransformer(States.class));
criteria.add(Restrictions.eq("country.id", id));
List<States> statesList = new ArrayList();
statesList = (List<States>) criteria.list();
System.out.println(">>>"
+ statesList.get(0).getSuburbs().size());
>>>>> returns Zero
나는 AliasToBeanResultTransformer 매우 새로운 오전하지만 난 모든 필드에 대한 투사를 만들어야합니다 들었다 link 전 콩에 넣어지기를 원하지만 내 말을 듣지 마라. 나는 틀린 것일 수도있다. –
@GabrielNetto 그것을 시도했지만 "com.project.States 클래스의 suburbName에 대한 setter를 찾을 수 없습니다." –