【问题标题】:"Repeated column in mapping for collection" for hibernate ManyToMany with same foreign key?具有相同外键的休眠ManyToMany的“集合映射中的重复列”?
【发布时间】:2016-09-29 10:29:29
【问题描述】:

我有 4 个表如下:

create table market (
    id int(6) unsigned auto_increment primary key,
    market_id varchar(30) unique
);

create table market_channel_group (
    id int(6) unsigned auto_increment primary key,
    market_id varchar(30),
    channel_group_id varchar(30),
    unique index (market_id,channel_group_id)
);

create table market_channel (
    id int(6) unsigned auto_increment primary key,
    market_id varchar(30),
    channel_id varchar(30),
    unique index (market_id,channel_group_id)
);

create table market_channel_group_detail (
    id int(6) unsigned auto_increment primary key,
    market_id varchar(30),
    channel_group_id varchar(30),
    channel_id varchar(30),
    unique index (market_id,channel_group_id, channel_id)
);

如您所见,market 对 market_channel_group、market_channel 是 OneToMany。 market_channel_group 是特定市场下对 market_channel 的多对多。

问题出在我的 market_channel_group 实体中,我有以下代码:

@Entity(name = "market_channel_group")
@Table(name = "market_channel_group", uniqueConstraints = {@UniqueConstraint(columnNames = {"market_id", "channel_group_id"})})
public class MarketChannelGroup extends BaseEntity {

    private static final long serialVersionUID = 1L;

    public MarketChannelGroup() {
        super();
    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private int id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "market_id", referencedColumnName = "market_id")
    private Market market;

    @Column(name = "channel_group_id", length = 50)
    private String channelGroupId;

    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinTable(name = "market_channel_group_detail",
            joinColumns = {@JoinColumn(name = "market_id", referencedColumnName = "market_id"), @JoinColumn(name = "channel_group_id", referencedColumnName = "channel_group_id")},
            inverseJoinColumns = {@JoinColumn(name = "market_id", referencedColumnName = "market_id"), @JoinColumn(name = "channel_id", referencedColumnName = "channel_id")})
    private List<MarketChannel> channels;

...
}

但是,我得到了这个例外:

Caused by: org.hibernate.MappingException: Repeated column in mapping for collection: MarketChannelGroup.channels column: market_id
    at org.hibernate.mapping.Collection.checkColumnDuplication(Collection.java:343) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
...

我应该如何正确编写ManyToMany注解?或者我的设计有什么问题。

更新

由于我们要从外部资源导入数据,所以自增id不作为其他表的引用,每个表都有自己的id以外的索引。

【问题讨论】:

  • 你解决了吗?您是否为此创建了 Hibernate 问题?

标签: java hibernate jpa many-to-many


【解决方案1】:

对我来说,这是通过将insertable = false, updatable = false 添加到@JoinColumn 来解决的。

【讨论】:

  • 它运行成功。谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2011-07-26
相关资源
最近更新 更多