gpt4 book ai didi

java - Hibernate 将两个表映射到一个类

转载 作者:行者123 更新时间:2023-12-02 00:58:20 24 4
gpt4 key购买 nike

我需要将两个表映射到一个类,但很难弄清楚这一点。一张表是 ROOMS,另一张表是 TRAINERS。

房间表:

OOC_UNIT_ID          NUMBER(6,0)
OOC_START_DT DATE
OOC_START_TM DATE
OOC_DT_MOD DATE
OOC_USER_MOD VARCHAR2(30 BYTE)
OOC_END_DT DATE
OOC_END_TM DATE
OOC_REASON_TX VARCHAR2(250 BYTE)
OOC_RESERVED_FOR VARCHAR2(30 BYTE)
OOC_CLS_ID NUMBER(9,0)
OOC_TIMEFRAME VARCHAR2(1 BYTE)
OOC_WSD_CD VARCHAR2(2 BYTE)
OOC_TEAM_UNIT_ID NUMBER(6,0)
OOC_WSD_ACT_RMAT_ID NUMBER(6,0)

培训师表:

TRSC_ID                NUMBER(9,0) -- generated sequence
TRSC_OOC_UNIT_ID NUMBER(6,0)
TRSC_OOC_START_DT DATE
TRSC_OOC_START_TM DATE
TRSC_OOC_RESERVED_FOR VARCHAR2(30 BYTE)
TRSC_TPOC_ID NUMBER(6,0)
TRSC_DT_CREATED DATE
TRSC_USER_CREATED VARCHAR2(30 BYTE)
TRSC_DT_MOD DATE
TRSC_USER_MOD VARCHAR2(30 BYTE)
TRSC_REMARKS VARCHAR2(250 BYTE)
TRSC_NOSHOW_REASON VARCHAR2(100 BYTE)

应在 OOC_UNIT_ID=TRSC_OOC_UNIT_IDOOC_START_DT=TRSC_OOC_START_DTOOC_START_TM=TRSC_OOC_START_TM 上连接表。

ROOMS 表的主键为:OOC_UNIT_ID、OOC_START_DT、OOC_START_TM。 TRAINERS 表的主键是:TRSC_ID

我需要按 OOC_UNIT_IDOOC_START_DTOOC_START_TMOOC_END_DTOOC_END_TM 查询此数据OOC_WSD_ACT_RMAT_ID

在 SQL 中,它可能类似于:

SELECT * 
FROM TRAINERS t, ROOMS r
WHERE t.TRSC_OOC_UNIT_ID = r.OOC_UNIT_ID
AND t.TRSC_OOC_START_DT = r.OOC_START_DT
AND t.TRSC_OOC_START_TM = r.OOC_START_TM
AND ...

我在项目的其他地方使用 ROOMS 表,并且它已经映射为独立对象。是否有一种方法可以将其用作 TRAINERS 对象的子对象,或者将这两个表映射到一个平面对象会更容易吗?映射会是什么样子?

谢谢,尼克

最佳答案

要将单个类映射到两个(或更多)单独的表,您需要使用 @SecondaryTable注释:

@Table(name="ROOMS")
@SecondaryTable(name="TRAINERS", pkJoinColumns={
@PrimaryKeyJoinColumn(name="TRSC_OOC_UNIT_ID", referencedColumnName="OOC_UNIT_ID"),
@PrimaryKeyJoinColumn(name="TRSC_OOC_START_DT", referencedColumnName="OOC_START_DT"),
@PrimaryKeyJoinColumn(name="TRSC_OOC_START_TM", referencedColumnName="OOC_START_TM")
})
public class MyMergedEntity {

然后,您需要使用 @Column(table="TRAINERS") 注释映射到 TRAINERS 表的每个单独属性,以指定它属于哪个表。如果您使用 XML 映射,则上述所有操作都可以通过 join 完成元素。

总而言之,在我看来,您的两个表本质上相当不同,不应该映射到单个类(特别是因为您已经说过您已经在其他地方映射了ROOMS )。也许您应该将您的 Trainer 映射为 ManyToOne而是关联。

关于java - Hibernate 将两个表映射到一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57791338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com