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=…
。