tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
1
ZUGRIFFE
1316
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Sentoo
    Sentoo Sentoo ist offline Mitglied Gold
    Registriert seit
    Jul 2009
    Ort
    Brühl
    Beiträge
    131
    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
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
      @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
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    
    @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 ...

    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
    Geändert von Sentoo (21.08.09 um 13:41 Uhr)
     

  2. #2
    Avatar von Sentoo
    Sentoo Sentoo ist offline Mitglied Gold
    Registriert seit
    Jul 2009
    Ort
    Brühl
    Beiträge
    131
    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.
     

Ähnliche Themen

  1. Hibernate-Annotations-Problem
    Von 7bkahnt im Forum Java
    Antworten: 2
    Letzter Beitrag: 23.04.10, 13:43
  2. [Hibernate] Problem mit Annotations
    Von AndreBrueck im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 28.06.09, 22:01
  3. Hibernate OneToMany
    Von igfas im Forum Java
    Antworten: 3
    Letzter Beitrag: 09.02.09, 11:59
  4. Hibernate Annotations
    Von drezze im Forum Java
    Antworten: 0
    Letzter Beitrag: 28.11.08, 08:36
  5. Hibernat Annotations: Probleme mit @OneToMany
    Von Ciscolos im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 1
    Letzter Beitrag: 14.04.08, 19:23