You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 20:37:04