如何在Hibernate中为无外键的A、B表建立一对多关联映射
解决Hibernate中跨无外键表的一对多关联映射问题
场景说明
数据库结构如下,且无外键约束:
- 表
A:包含字段a_c_id(关联表C的主键id),主键为id - 表
B:包含字段c_id(关联表C的主键id) - 表
C:主键为id
需求是通过Hibernate注解创建实体类,实现A类中关联List<B>的一对多映射。
遇到的问题
尝试使用@JoinColumn、@JoinTable的多种组合配置均无法实现正确映射,使用@JoinTable时还触发异常:Repeated column in mapping for collection: id。
正确解决方案
以下是A类的正确实体代码配置:
@Entity @Table(name = "A") @Data public class A implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "a_c_id") private Long aCId; @OneToMany @JoinColumn(name="c_id", referencedColumnName = "a_c_id") private List<B> bList; }
配置解释
这里通过@OneToMany配合@JoinColumn实现间接关联:
name="c_id"指定表B中用于关联表C的字段referencedColumnName="a_c_id"指定表A中用于关联表C的字段
Hibernate会通过这两个字段的匹配值,建立A到B的一对多关联关系,无需额外中间表,同时避免了@JoinTable配置带来的重复列异常。
内容的提问来源于stack exchange,提问作者Max Mazur
相关产品推荐
相关产品推荐

