繁体   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