2017-02-18 3 views
0

So verstehe ich, wie die JPA/Hibernate-Filter für sofortige Untereigenschaften zu verwenden (hier demonstriert: annotation to filter results of a @OneToMany association), aber was ich tun möchte, ist eine geschachtelte Eigenschaft zum Ausschließen einer Referenz. Wenn also C nicht als Referenz von B aktiv ist, möchte ich nicht, dass B in der Menge enthalten ist. Hier ist ein Beispiel für Code, der nicht funktioniert. Es beschwert sich darüber, dass c.Active dort in der Spalte unbekannt ist. Das liegt daran, dass der generierte SQL-Code c_0.is_active als Referenz enthält. Gibt es eine Möglichkeit, so etwas zu tun?Hibernate + JPA @Filter für geschachtelte Eigenschaft Objekt

@Entity 
public class A implements Serializable{ 
    @Id 
    @Column(name = "REF") 
    private int ref; 

    @OneToMany 
    @JoinColumn(name = "A_REF", referencedColumnName = "REF") 
    @Filter(name="test") 
    private Set<B> bs; 
} 

@Entity 
@FilterDef(name="test", defaultCondition="c.ACTIVE = 1") 
public class B implements Serializable{ 
    @Id 
    @Column(name = "A_REF") 
    private int aRef; 

    private C cObject; 
} 


@Entity 
public class C implements Serializable{ 
    @Id 
    private int ref; 

    @Column(name = "ACTIVE") 
    private boolean active; 
} 

Antwort

0

Ich glaube nicht, dass Sie Referenzen auf andere Tabellen auf diese Weise verwenden können.

Versuchen Sie folgendes:

@Entity 
@FilterDef(name="test", defaultCondition="aRef = 
       (select b.aRef 
       from B b inner join C c on c.ref = b.cRef 
       where c.ACTIVE = 1)" 
public class B implements Serializable{ 
+0

etwas Glück beim Testen? –