我需要将两个表Map到一个类,但我很难理解这一点。一张table是房间,另一张是运动鞋。
房间表:
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
.
rooms表的主键是: 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
.
在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表,它已经Map为独立对象。有没有一种方法可以将它作为trainers对象上的子对象使用,或者将这两个表Map到一个平面对象会更容易?Map看起来怎么样?
谢谢,尼克
4条答案
按热度按时间lx0bsm1f1#
要将单个类Map到两个(或更多)单独的表,需要使用@secondarytable注解:
然后需要对Map到的每个属性进行注解
TRAINERS
带的表格@Column(table="TRAINERS")
指定它所属的表。如果您使用的是xmlMap,那么以上所有操作都可以通过join元素完成。尽管如此,在我看来,您的两个表在本质上是相当不同的,不应该Map到单个类(特别是因为您已经说过您已经Map了一个类)
ROOMS
其他地方)。也许你应该把你的培训师Map成多人协会。dfddblmv2#
可以创建绑定到自定义对象的命名查询。这是我将采用的解决方案,因为不需要对db进行任何更改。
9bfwbjaz3#
在我的经验中,简单性是使用任何orm(包括hibernate)的关键。我会根据你的sql创建一个数据库视图,让我们称之为
TRAINERS_ROOMS
然后简单地将数据库视图Map到一个新的java对象,让我们调用它TrainersRooms
.您可以获得简单易用的hibernateMap管理器,但是您当然可以使用这个新对象执行任何更新,因此如果您需要,这个解决方案将不适合您。
63lcw9qa4#
我提出的解决方案似乎可以用来查询数据,我还没有尝试过任何插入/更新/删除操作。
我创造了
TRAINER
对象来扩展ROOM
对象。然后我修改了
ROOM
要包含联接的子类,请执行以下操作:到目前为止,它似乎正在发挥作用。
谢谢,
尼克