如何在hibernate中使用单个表连接三个表?

Sur*_*non 5 java hibernate jpa

我有三个表A,BC和映射表A_B_C具有外键的所有三个表和其他一些属性(比方说X,Y).现在,我想在我的java类中加入代表这三个表.

这些表之间的关系是一对多的.因此,我希望我的Java类看起来像这样.

@Entity(name = "A")
@Table(name = "A")
public class A {

       ??? Hibernate Annotation or query
       Map<B,List<C>> BMapC;
}

@Entity(name = "B")
@Table(name = "B")
public class B {
      ...
}

@Entity(name = "C")
@Table(name = "C")
public class C {
      ...
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以利用Hibernate Annotations.如果没有,有没有办法可以编写自定义查询并填充变量?

Sur*_*non 8

不幸的是,hibernate没有为这种情况提供开箱即用的任何注释.只能通过创建一个类映射来处理此场景A_B_C:

@Entity
@Table(name = "A_B_C")
public class name = "A_B_C" {

     @ManyToOne(cascade=CascadeType.ALL)
     @JoinColumn(name = "FK_B", nullable = false)
     private B b;

     @ManyToOne(cascade=CascadeType.ALL)
     @JoinColumn(name = "FK_C", nullable = false)
     private C c;

     //Getters, Setters, other attributes etc.
} 
Run Code Online (Sandbox Code Playgroud)

并在A中有一个这个对象的列表:

 @Entity
 @Table(name = "A")
 public class name = "A" {

          @OneToMany(cascade=CascadeType.ALL)
          @JoinColumn(name = "FK_A", nullable = false)
          private Set<A_B_C> abc;

          //Getters, Setters, other attributes etc.
 } 
Run Code Online (Sandbox Code Playgroud)

并以编程方式将Set abc转换为地图B,C.