Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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_Jpa - Fatal编程技术网

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

Java 如何在hibernate中使用单个表连接三个表?,java,hibernate,jpa,Java,Hibernate,Jpa,我有三个表A,B和C,还有一个映射表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; } @Ent

我有三个表
A
B
C
,还有一个映射表
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 {
      ...
}
@实体(name=“A”)
@表(name=“A”)
公共A类{
?休眠注释或查询
Map-BMapC;
}
@实体(name=“B”)
@表(name=“B”)
公共B级{
...
}
@实体(name=“C”)
@表(name=“C”)
公共C类{
...
}

我想知道是否有可能利用Hibernate注释来实现这一点。如果没有,是否有一种方法可以编写自定义查询并填充变量

我相信你要找的更多的是追随者

其中联接表有一个额外的列

希望本文能有所帮助


Cheers

不幸的是,hibernate没有为此类场景提供任何现成的注释。这种情况只能通过创建到
a\u B\u 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.
} 
并将此对象的列表保存在:

 @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.
 } 
@实体
@表(name=“A”)
公共类名称=“A”{
@OneToMany(级联=级联类型.ALL)
@JoinColumn(name=“FK_A”,nullable=false)
私人设置abc;
//getter、setter、其他属性等。
} 

并通过编程将集合abc转换为
B,C

的映射,我相信这会导致重复数据??你能详细说明一下吗?是的,这将导致数据模型中出现重复数据。不过,对于我们的用例来说,这是可以的。只是一个旁注:这里的
@Entity
@Table
不需要
name=…