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

使用@SecondaryTable映射第二表ID列时出现重复列异常,如何解决?

Hibernate @SecondaryTable映射副表id列报错问题排查

问题描述

使用@SecondaryTable关联主表first_table和副表second_table时,尝试将副表的id列映射到实体的chId属性时触发映射异常,但dep_id列在两表间的映射正常。

报错信息

nested exception is org.hibernate.MappingException: Repeated column in mapping for entity: com.example.entity.ClientData column: id 

实体类代码

@Data
@Entity
@Table(name = "first_table")
@SecondaryTable(name = "second_table")
public class ClientData {

    @Id
    @NotNull
    private String id;

    // Id from 2nd table
    @Column(name = "id", table = "second_table")
    private String chId; 

    @Column(name = "dep_id", table = "first_table")
    private String depId;

    @Column(name = "dep_id", table = "second_table")
    private String chDepId;
}

问题原因

Hibernate在使用@SecondaryTable时,默认会将主表的主键(这里是first_table.id)作为主副表的连接字段,自动将副表的同名列second_table.id与主表主键属性id关联映射。而你手动通过@Column将second_table.id映射到chId属性,这就导致同一个数据库列被重复映射到实体的两个属性,触发了重复列的映射异常。

解决方法

根据业务场景选择对应方案:

  • 场景1:副表second_table.id是主表主键的外键关联字段
    不需要手动映射chId属性,Hibernate已经通过默认的主键关联维护了该字段的关联关系,直接删除chId属性即可。

  • 场景2:副表second_table.id是独立字段,主副表通过其他字段关联
    显式指定主副表的连接条件,修改@SecondaryTable注解,添加pkJoinColumns属性定义关联字段(假设主副表通过dep_id关联):

    @Data
    @Entity
    @Table(name = "first_table")
    @SecondaryTable(name = "second_table", pkJoinColumns = @PrimaryKeyJoinColumn(name = "dep_id", referencedColumnName = "dep_id"))
    public class ClientData {
    
        @Id
        @NotNull
        private String id;
    
        // Id from 2nd table
        @Column(name = "id", table = "second_table")
        private String chId; 
    
        @Column(name = "dep_id", table = "first_table")
        private String depId;
    
        @Column(name = "dep_id", table = "second_table")
        private String chDepId;
    }
    

    这样Hibernate就不会默认使用id作为主副表的连接字段,你可以正常将second_table.id映射到chId属性。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:40:39