如何使用FetchType.Eager检索值



我有三个班,分别是乡村、州和郊区。每个国家都有许多州,每个州都有许多郊区。

我的冬眠是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();

最新更新