我有三个班,分别是乡村、州和郊区。每个国家都有许多州,每个州都有许多郊区。
我的冬眠是4.2.1决赛。
问题是,尽管FetchType的州是EAGER定义的,但我无法检索每个州的郊区。
我也读过这个答案。由于我不想在检索国家的任何时候检索所有的州和郊区。因此,我认为需要使用条件覆盖获取策略,而不是使用
@LazyCollection(LazyCollection Option.FLSE)
国家
@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 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;
}
}
郊区
@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
受此启发并链接
User user = (User) session.createCriteria(User.class)
.setFetchMode("permissions", FetchMode.JOIN)
.add( Restrictions.idEq(userId) )
.uniqueResult();