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

Spring Hibernate mappedBy引用未知目标实体属性问题求助

问题原因及修复方案

核心错误

异常提示的关键是:mappedBy reference an unknown target entity property: Queue.queue_clinic,问题出在实体类属性名和mappedBy指定的名称不匹配:

  • Queue实体类中定义的关联属性是驼峰命名的queueClinic
  • 但QueueClinic类的@OneToMany注解里,mappedBy写的是数据库列名格式的queue_clinic,Hibernate会根据这个值去Queue实体类找对应的属性,自然找不到,导致映射失败。

修复步骤

  1. 修正mappedBy属性值:将QueueClinic中@OneToMany的mappedBy改为queueClinic,和Queue实体的属性名完全一致。
  2. 规范集合属性命名:把QueueClinic里的private List<Queue> queue;改为private List<Queue> queues;,集合类属性用复数命名更符合编码规范,避免和单实体名混淆。

修改后的QueueClinic代码示例

@EqualsAndHashCode(callSuper = true)
@Data
@Entity
@Table(name = "queue_clinic")
public class QueueClinic extends BaseChangeableOpenmrsMetadata {
    
    private static final long serialVersionUID = 1L;
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "queue_clinic_id")
    private Integer queueClinicId;
    
    // 修正mappedBy值,同时修改属性名为queues
    @OneToMany(mappedBy = "queueClinic", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @Where(clause = "voided = 0 and (started_at <= current_timestamp() and ended_at is null)")
    private List<Queue> queues;
    
    @Override
    public Integer getId() {
        return getQueueClinicId();
    }
    
    @Override
    public void setId(Integer id) {
        this.setQueueClinicId(id);
    }
}

额外说明

Hibernate的mappedBy参数始终指向关联实体类中的Java属性名,而不是数据库表的列名,这点一定要注意区分。

内容的提问来源于stack exchange,提问作者CKW

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:30:57