2017-02-18 25 views
0

Итак, я понимаю, как использовать фильтры JPA/Hibernate для немедленных вспомогательных свойств (здесь показано: annotation to filter results of a @OneToMany association), но я хочу использовать вложенное свойство для исключения ссылки. Поэтому, если C не является активным в качестве ссылки B, я не хочу, чтобы B был включен в набор. Вот пример кода, который не работает. Он жалуется на то, что c.Active неизвестно там, где находится столбец. Это связано с тем, что сгенерированный sql содержит c_0.is_active в качестве ссылки. Есть ли способ сделать что-то подобное?Hibernate + JPA @ Фильтр для вложенного объекта свойства

@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

любая удача с тестированием? –