0

国、州、郊外の3つのクラスがあります。各国には多くの州があり、各州には多くの郊外があります。

私の休止状態は 4.2.1.Final です。

問題は、州の FetchType が EAGER に定義されているにもかかわらず、各州の郊外を取得できないことです。

この回答も読みました。国を取得するときはいつでもすべての州と郊外を取得したくないので。
したがって、 @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 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
4

1 に答える 1