Spring Hibernate mappedBy引用未知目标实体属性问题求助
问题原因及修复方案
核心错误
异常提示的关键是:mappedBy reference an unknown target entity property: Queue.queue_clinic,问题出在实体类属性名和mappedBy指定的名称不匹配:
- Queue实体类中定义的关联属性是驼峰命名的
queueClinic - 但QueueClinic类的
@OneToMany注解里,mappedBy写的是数据库列名格式的queue_clinic,Hibernate会根据这个值去Queue实体类找对应的属性,自然找不到,导致映射失败。
修复步骤
- 修正
mappedBy属性值:将QueueClinic中@OneToMany的mappedBy改为queueClinic,和Queue实体的属性名完全一致。 - 规范集合属性命名:把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
相关产品推荐
相关产品推荐

