我有 3 个类,Base
定义如下:Child
Other
@Entity
@Filter(name = "myFilter", condition = "propBase = 'special'")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Base {
private String propBase;
//Getters, Setters
}
@Entity
public class Child extends Base {
private String propChild;
//Getters, Setters
}
@Entity
public class Other {
@Filter(name = "myFilter", condition = "propBase = 'special'")
private Set<Child> myList;
//Getters, Setters
}
假设过滤器是在包级别定义的,因此所有使用它的类都可以看到它。
使用启用了myFilterOther
的会话,我从我的数据库中检索了一些实例。然后,当我尝试访问该myList
集合时,由于该集合被声明为惰性,Hibernate 尝试从数据库中获取该集合。但是,在生成的 SQL 查询中出现了一些我没想到的东西:table 的别名Child
用于为列添加前缀propBase
,并且由于该列未在 tableChild
中定义(它定义在 中Base
),所以我收到以下错误:
错误 JDBCExceptionReporter - 'where 子句'中的未知列'childAlias.propBase'
根据这个线程,这似乎是预期的行为,但我不明白它是怎么回事。另外,假设这是预期的行为,当条件使用基类中定义的属性时如何使用过滤?
谢谢