Hello,
I have the following example - classes A, B with a 1:n relationship.
Code:
@Entity @Table(name = "A")
@SequenceGenerator(name = "keyid_generator", sequenceName = "A_sequence")
public class A extends AbstractIntKeyIntOptimisticLockingDto {
   private String name;
   private Set<B> bs;
   @OneToMany(mappedBy = "a", fetch = FetchType.EAGER)
   @Fetch(FetchMode.JOIN)
   public Set<B> getBs() {
      return bs;
   }
   public void setBs(Set<B> bs) {
      this.bs = bs;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
}
@Entity @Table(name = "B")
@SequenceGenerator(name = "keyid_generator", sequenceName = "B_sequence")
public class B extends AbstractIntKeyIntOptimisticLockingDto {
   private String name;
   private A a;
   @ManyToOne(fetch = FetchType.EAGER)
   @JoinColumn(name = "a", nullable = false,
   unique = false, updatable = false)
   @Fetch(FetchMode.JOIN)
   public A getA() {
      return a;
   }
   public void setA(A a) {
      this.a = a;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
}
If I try and select all Bs (getAll() on the DAO), Hibernate issues a select for each A (N+1 SELECT problem) despite my request for JOIN everywhere.
I know how to solve this with HQL, and I can do this which works correctly
Code:
findByCriteria(DetachedCriteria.forClass(B.class)
  .setFetchMode("a", FetchMode.JOIN)
  .setFetchMode("a.bs", FetchMode.JOIN)
);
but can I get it to work directly? Why do I need to explicitly mark "a.bs" as JOINed again?
I'm using hibernate core 3.3.2.GA.