2017-02-18 167 views
0

所以我理解如何使用JPA/Hibernate过滤器的立即子属性(这里演示:annotation to filter results of a @OneToMany association),但我想要做的是使用嵌套属性排除引用。所以如果C不是作为B的参考,我不希望B包含在集合中。这是一个不起作用的代码示例。它抱怨c.Active在哪里列不明。这是因为生成的sql包含c_0.is_active作为参考。有没有办法做这样的事情?Hibernate + JPA @Filter for嵌套属性对象

@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; 
} 

回答

0

我不认为你可以用这种方式引用其他表。

试试这个:

@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

与测试的任何运气? –