Hibernate Annotations: Filtern OneToMany Beziehung

Sentoo

Erfahrenes Mitglied
Hallo zusammen,

ich könnte das Ganze mit einem DAO umgehen, aber ich verstehe noch nicht ganz, warum das nicht funktioniert. Also, folgende Problemstellung.

Es gibt eine Entität RiskAssessment, die kann beliebig viele Risiken (Entität Risk) beinhalten. Ein Risko kann als gelöscht markiert werden (deleted = true). Im Standardfall möchte ich diese Risiken nicht mit anzeigen. Ist eigentlich nichts esoterisches :)

Listing 1 - Herstellen der Beziehung
Java:
  @OneToMany(cascade = {CascadeType.ALL} )
  @JoinTable(
          name="DiscoveredRisks",
          joinColumns = @JoinColumn(name = "assessment_id"),
          inverseJoinColumns = @JoinColumn(name = "risk_id")
  )
  @Filter(name="deleted", condition="deleted = false")
  public List<Risk> getRisks() {
    return risks;
  }

Listing 2 - Filterdefinition der Zielentität
Java:
@Entity
@FilterDef(name="deleteFlag", parameters=@ParamDef(name="deleteFlag", type="boolean"), defaultCondition="false")
@Filters ({
  @Filter(name = "deleted", condition = "deleted = :deleteFlag")
})
@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Risk {
// ....

Das ganze habe ich mehr oder minder aus der Hibernatedokumentation entnommen.

Was mir dabei wohl auffällt, ist dass man dort einen Parameter definiert - das ":deleteFlag" - den aber nirgendwo mit Leben füllt. Ich hatte gehofft/vermutet, dass es über die Deklaration des Filters in Listing 2 klappen würde. Dem ist aber nicht so.

Weiter hatte ich im Internet gefunden, dass über die Hibernate-Session ein Filter enabled werden kann (muss?). Ist das vielleicht beim Problem?

Habt ihr eine Idee ... :confused:

Edit: Fast vergessen :) wenn ich .getRisks() aufrufe sehe ich im Log, dass der join korrekt generiert wird. Dabei wird aber in der Where Clause der Filter nicht eingebaut. Sprich es erscheint kein "AND deleted = false" o.ä. im SQL Query.

Könnte auch sein, dass ich das Filter-Konzept falsch verstanden habe, will ich ja nicht ausschließen ;)
 
Zuletzt bearbeitet:
Hatte es mir fast gedacht. Ich hatte das Konzept falsch verstanden - meiner Meinung nach. An der Stelle wo ich den Filter einbauen wollte, ist es nicht richtig. Dort deklariert man die Beziehung zwischen den beiden Klassen. Constraints haben dort wohl nichts verloren.

Habe für das was ich will ein DAO gemacht und einen entsprechenden named Query.
 

Neue Beiträge

Zurück