gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:36:25 26 4
gpt4 key购买 nike

我需要将两个表映射到一个类,但无法解决这个问题。一张 table 是 ROOMS,另一张是 TRAINERS。

ROOMS 表:

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)

TRAINERS 表:

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/1667918/

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