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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 01:15:39