Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate(映射到交叉引用表)_Java_Hibernate_Data Modeling - Fatal编程技术网

Java Hibernate(映射到交叉引用表)

Java Hibernate(映射到交叉引用表),java,hibernate,data-modeling,Java,Hibernate,Data Modeling,我试图做以下(非常做作的例子): 我有两个表A和B,它们形成了多对多关系,我为它们创建了一个映射表A_B。然后我有一个表C,它与映射表A_B形成了一对多关系 tableA ------ a_id [pk] 然后 然后 然后 然后 所以在Hibernate中,我为A、B和C创建了实体 ClassA { .... @JoinTable( name="A_B", joinColumns={@JoinColumn(name="a_id")},

我试图做以下(非常做作的例子):

我有两个表A和B,它们形成了多对多关系,我为它们创建了一个映射表A_B。然后我有一个表C,它与映射表A_B形成了一对多关系

tableA
------
a_id [pk]
然后

然后

然后

然后

所以在Hibernate中,我为A、B和C创建了实体

ClassA {
    ....
    @JoinTable(
        name="A_B",
        joinColumns={@JoinColumn(name="a_id")},
        inverseJoinColumns={@JoinColumn(name="b_id")}
    )
    @ManyToMany(cascade = {CascadeType.ALL})
    private Set<B> bset = new HashSet<B>();
}
ClassA{
....
@可接合(
name=“A_B”,
joinColumns={@JoinColumn(name=“a_id”)},
inverseJoinColumns={@JoinColumn(name=“b_id”)}
)
@ManyToMany(cascade={CascadeType.ALL})
私有集bset=newhashset();
}
然后(逆关系)

ClassB{
@许多(mappedBy=“bset”)
私有集主题=新HashSet();
}
这将创建第一个映射A_B,但是我不确定如何在hibernate中创建映射C_AB。我甚至没有A_B的实体(只存在于数据库中),那么我该怎么做呢

谢谢你的帮助

干杯


JLove

我建议使用独立的关联/连接/链接实体类,而不是隐式的多对多表。因为在现实世界中,没有包含诸如创建时间、创建人、协议和雇佣合同等附加字段的联接表

所以我的意思是:

  • 表A_B应映射到独立实体,并且当两个对象链接在一起时,必须有一些附加字段
  • 表C_AB也应映射到独立实体
  • 当我们想要查找Collection字段时,我们可以通过HQL按顺序查找和获取Collection字段
  • 多对多是错误的,关联表不能有额外的字段,但它应该有

感谢您的回复。。。我能问一下我是否理解你的回答是正确的吗。您建议我不使用映射表(我目前拥有的映射表),而是创建一个新实体来建模关系。。。这个实体不只是一个映射实体吗(就像我已经使用了ManyToMany?正如你所知道的,我的表实际上只是一个映射…我不需要额外的字段)。
tableA_B
-------
a_id [pk]
b_id [pk]
tableC
------
c_id [pk]
tableC_AB
---------
c_id [pk]
a_id [pk]
b_id [pk]
ClassA {
    ....
    @JoinTable(
        name="A_B",
        joinColumns={@JoinColumn(name="a_id")},
        inverseJoinColumns={@JoinColumn(name="b_id")}
    )
    @ManyToMany(cascade = {CascadeType.ALL})
    private Set<B> bset = new HashSet<B>();
}
ClassB {
    @ManyToMany(mappedBy="bset")
    private Set<A> subjects = new HashSet<A>();
}