我需要将两个表映射到一个类,但很难弄清楚。一个表是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
。
ROOMS表的主键是:OOC_UNIT_ID, OOC_START_DT, OOC_START_TM
。TRAINERS表的主键是: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表,它已经映射为独立对象。是否有一种方法可以将其用作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元素完成上述所有操作。
综上所述,在我看来,您的两个表本质上是完全不同的,不应映射到单个类(尤其是因为您已经说过您已经映射ROOMS
到其他地方)。也许您应该将Trainer映射为ManyToOne关联。
我正在学习Hinbernate,所以如果我能将两个类映射到一个DB表,我的想法就被忽略了。 Ex: 虽然这两个类都映射到一个表,但让我们用字符串数据类型的一列来命名Employee。 Hibernate是否能够根据我用于创建的类在表中创建行。还是您认为应该有一个鉴别器列来区分类? 注意:类之间没有继承关系,它们是独立的。
我有两个地图,键为整数,值为双倍。 我想创建第三个按键排序的映射,值将是两个映射的双精度列表。 地图1: Map2: 最终地图: 如上所述,如果一个地图中的一个键在另一个地图中丢失,则另一个地图的最终地图中的值应默认为0.00 我可以使用putAll方法将所有键放入第三张地图。但如何按照我的意愿设定这些值呢? 感谢阅读!
我需要映射两个GET方法,如下所示: 但当我绘制这张地图时,Spring被搞糊涂了! 当我击中http://localhost:8080/tickets在Chrome中,服务器上的结果是: 当我击中http://localhost:8080/tickets/12在Chrome中,服务器上的结果是: 我的Spring控制器是: 我的单元测试是: 我正在使用Java11和SpringBoot2.1.6
但是当我运行应用程序时,我会得到以下异常:
我对下面的问题有很大的麻烦。我有一个实体“home”,我在代码中的两个不同位置使用它。问题是,需要根据使用实体的类将其映射到不同的表。 有办法做到我描述的那样吗?
我有三个表A表有字段 带字段的表B 带字段的表C 和分别引用表A的和表B的。表C的postgres定义如下: 然而,在我的代码中,我不需要表C的实体。所以我希望能够在@ManyToOne关系中映射实体A和B: 我有一个测试是这样的: 在断言中失败。 我做错了什么?