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  subObjects = new HashSet(0);

  @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "myobject")
  public Set getSubObjects()
  {
    return this.subObjects;
  }
}

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 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;
  }
}
In Hibernate mit OneToMany Beziehungen arbeiten
Tagged on:                                 

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.