Hibernate引用抽象父类字段写@Where子句报错的解决办法
解决Hibernate中@Where子句引用父类字段提示Unknown column的问题
问题场景
我定义了如下实体类:
抽象父类A
abstract Entity A { long id; boolean sharedField; }
子类B(继承自A)
Entity B extends A { string specificField; @ManyToOne @JoinColumn(name = "id_c") private C c; }
实体C
Entity C { long id; @OneToMany(mappedBy = "c", cascade = CascadeType.ALL) @Where(clause = "sharedField = 'something'") private List<B> bList; }
使用Hibernate时触发错误:Unknown column 'b.shared_field' in 'where clause'
数据库表结构说明:
- 表A包含
id和shared_field字段 - 表B包含
id(与表A的id一致)、id_c和specific_field字段
需求:希望通过@Where子句或其他方式,让Hibernate只获取B表中符合条件的行,尝试过NamedQuery但无效。
已验证的解决方法
修改实体C中的@Where子句,通过子查询关联父表A来筛选:
@Where(clause = "id IN (SELECT a.id FROM A a WHERE a.id = id AND a.shared_field = 'something')")
内容的提问来源于stack exchange,提问作者Igor Milovanovic
相关产品推荐
相关产品推荐

