【问题标题】:Hibernate manytomany @JoinTable + @SecondaryTable duplicate entriesHibernate manytomany @JoinTable + @SecondaryTable 重复条目
【发布时间】:2012-06-03 19:07:11
【问题描述】:

我有一个@ManyToMany 类型的关系与@JoinTable 关联。

问题是关系中的实体有自己的表,但是一些属性应该放在关联表中。

我认为A_C 表很好。

添加 @SecondaryTable 副本。

@Entity
@Table(name = "A")
@SecondaryTable(name = "A_C", pkJoinColumns = {
@PrimaryKeyJoinColumn(columnDefinition = "A_ID", name = "A_ID")})
class A {
    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "A_B", joinColumns = {@JoinColumn(name = "A_ID")}, inverseJoinColumns = {@JoinColumn(name = "B_ID")})
    private List<B> bs = new ArrayList<B>();

    @Column(table = "A_B")
    private int b1;
}

@Entity
@Table(name = "B")
@SecondaryTable(name = "A_B", pkJoinColumns = {
@PrimaryKeyJoinColumn(columnDefinition = "B_ID", name = "B_ID")})
class B {
    @Column(table = "A_B")
    private int a1;

    @Column(table = "A_B")
    private int a2;

    @ManyToMany(mappedBy = "A_ID", fetch = FetchType.LAZY)
    private List<A> as = new ArrayList<A>();

}

当保存A 实体时,B 会以以下方式复制:

A_ID    B_ID   a1     a2
   1       0    1      1    
   1       1    0      0

应该在哪里

A_ID    B_ID   a1    a2
   1       1    1     1

@Embeddable 也不起作用。

ssedano。

【问题讨论】:

    标签: hibernate hibernate-mapping


    【解决方案1】:

    A_B 是表 AB 的联接表,但您也将它用作 B 的辅助表。

    这不起作用。如果将B 分配给多个As,B.a1B.a2 应该有什么值?

    有三种可能: * a1 和 a2 属于关联。在这种情况下,您需要一个关联类来存储该附加信息。 * a1和a2只属于B:a1和a2不应该在表A_B中 * AB 的组合:表A_BB 应该合并,并且应该将多对多关系替换为一对多关系。

    如果没有具体的属性名称,很难判断它们是否真正属于。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-11
      • 2018-05-16
      • 1970-01-01
      • 2018-01-21
      • 1970-01-01
      相关资源
      最近更新 更多