[英]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.