我需要将两个表映射到一个类,但很难弄清楚。一个表是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)
培训人员表:
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_ID,OOC_START_DT=TRSC_OOC_START_DT和OOC_START_TM=TRSC_OOC_START_TM。
OOC_UNIT_ID=TRSC_OOC_UNIT_ID
OOC_START_DT=TRSC_OOC_START_DT
OOC_START_TM=TRSC_OOC_START_TM
ROOMS表的主键是:OOC_UNIT_ID, OOC_START_DT, OOC_START_TM。TRAINERS表的主键是:TRSC_ID。
OOC_UNIT_ID, OOC_START_DT, OOC_START_TM
TRSC_ID
我需要通过查询这个数据OOC_UNIT_ID,OOC_START_DT,OOC_START_TM,OOC_END_DT,OOC_END_TM和OOC_WSD_ACT_RMAT_ID。
OOC_UNIT_ID
OOC_START_DT
OOC_START_TM
OOC_END_DT
OOC_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 {
然后,您需要注释映射到TRAINERS表的每个单独的属性,@Column(table="TRAINERS")以指定它属于哪个表。如果您使用的是XML映射,则可以通过join元素完成上述所有操作。
TRAINERS
@Column(table="TRAINERS")
综上所述,在我看来,您的两个表本质上是完全不同的,不应映射到单个类(尤其是因为您已经说过您已经映射ROOMS到其他地方)。也许您应该将Trainer映射为ManyToOne关联。
ROOMS