簡體   English   中英

所有實體的休眠公共主鍵部分

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM