[英]Hibernate Common Primary Key part of All Entity
我具有以下数据库结构,其中每个表上都有一些特定的列,而这些列(CPK1,CPK2,CPK3,CPK4)是所有表的主键的一部分。 每个表还具有一个额外的主键,它是实际的主键,在另一个表上作为外键引用(表B中的IDPKA,表C中的IDPKB)。 我无法为这些表创建实体结构。
TableA
-------------------------------------------------------------
CPK1 CPK2 CPK3 CPK4 IDPKA A1
-------------------------------------------------------------
10 1 2 3 1 XYZ
-------------------------------------------------------------
TableB
-------------------------------------------------------------
CPK1 CPK2 CPK3 CPK4 IDPKB B1 IDPKA
-------------------------------------------------------------
10 1 2 3 1 BDATA1 1
10 1 2 3 2 BDATA2
-------------------------------------------------------------
TableC
-------------------------------------------------------------
CPK1 CPK2 CPK3 CPK4 IDPKC C1 IDPKB
-------------------------------------------------------------
10 1 2 3 1 ABCD 1
10 1 2 3 2 PQRS 1
10 1 2 3 3 ABCD1 2
10 1 2 3 4 PQRS1 2
-------------------------------------------------------------
根据以下数据是关系船。
XYZ
|
|---BDATA1
| |
| |---ABCD
| |---PQRS
|
|---BDATA2
| |
| |---ABCD1
| |---PQRS1
实体结构应该类似于我可以使用CPK1,CPK2,CPK3,CPK4,IDPKA在表A上查询,并且应该以适当的关系检索所有数据。
我还要在实体POJO上使用注释。
如果可以的话请帮助,如果不能的话请给我一些出路。
由于仅使用IDPKA将表相互关联,因此IDPKB和IDPKC会忽略其他列。 它们似乎只是这些表的可靠列。 如果您想改善搜索,则稍后将使用它们来制作复合词,但现在不再是我们的主题。
据我了解,两者之间的两个关系是一对多的。 只需搜索Hibernate教程即可通过注释建立这些绑定。
A-(1-n)-> B-(1-n)-> C
这些绑定(从左到右说)应该具有fetch = FetchType。 EAGER配置,因此您可以通过选择A获得所有B和C。
如预期的那样,映射从右到左连接是多对一的。 此映射可以为EAGER,也可以不为EAGER,具体取决于您。
EAGER的重要一点是:如果您的实体是多对多且使用了EAGER,则可能会导致启动选择所有DB数据的操作。 应始终牢记这一点。
一个样品:
public class A {
...
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "a")
@Fetch(FetchMode.SELECT)
public List<B> getBs() {
return this.bs;
}
...
}
public class B {
...
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "IDPKA")
public A getA() {
return this.a;
}
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.