In Hibernate mit OneToMany Beziehungen arbeiten

Bei einer Java Anwendung die mit Hibernate oder JPA als Persistence Framework arbeitet, kann es vorkommen das man alle Objekte mit HQL ermitteln will deren OneToMany Beziehungen eine bestimmte Größe haben oder mehr als null Elemente beinhalten. Eine Beispiel Definition unserer Klassen könnte in etwa so aussehen. MyObject:
@Entity
@Table(name = "my_object", schema = "public")
public class MyObject implements java.io.Serializable
{
  private Set<mysubobject>  subObjects = new HashSet</mysubobject><mysubobject>(0);
 
  @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "myobject")
  public Set</mysubobject><mysubobject> getSubObjects()
  {
    return this.subObjects;
  }
}
</mysubobject>
MySubObject:
@Entity
@Table(name = "my_sub_object", schema = "public")
public class MySubObject implements java.io.Serializable
{
  private MyObject myObject;
 
  @ManyToOne(cascade = {}, fetch = FetchType.LAZY)
  @JoinColumn(name = "myobject", unique = false)
  public MyObject getMyObject()
  {
    return this.myObject;
  }
}
Nach dem wir unsere Klassen mit Annotations oder auch XML definiert haben können wir jetzt in unserem DAO Objekt mit folgenden HQL Befehl alle Objekte von der Datenbank anfordern die mindestens ein Element im Set subObjects haben.
public List<myobject> findAllWithElements()
{
  try
  {
    String queryString = "select model from MyObject model where size(subObjects ) > 0";
    return getHibernateTemplate().find(queryString);
  }
  catch (RuntimeException re)
  {
    log.error("find all with elements failed", re);
    throw re;
  }
}
</myobject>

Leave a Reply