在用Spring + Hibernate重做公司以前的一个项目时,因为数据库都是遗留系统的,做数据映射遇到这么一个问题:
表结构
表RT_ROAD_SECTION是某个路段的拥堵状况,其中拥堵状况是通过外键JAM关联到配置表JAM_CONFIG。因为这张表不具备实体特性,我只设计了一个实体类:
其中jam就是JAM_CONFIG里的DESC了。映射文件如下:
Hibernate参考文档里面说join可以把一个实体类映射到多个表,但例子中join的table="ADDRESS"是从表,关联到class对应的主表PERSON。而我这里join的JAM_CONFIG却是主表,我不知道如何去配置。上面的映射文件生成的SQL如下:
显然rs.RSID = cfg.ID不对,应该为rs.JAM = cfg.ID就对了。我于是给RoadSectionStatus加上jamId属性,配置文件中添加:
告诉Hibernate是JAM_CONFIG.ID关联到RT_ROAD_SECTION.JAM,而不是关联到主键RSID上(实际应该反过来,是从表外键JAM关联到主表JAM_CONFIG的主键ID上),但是生成出来的结果还是一样。
--希望看一下,看看这个问题该如何解决?
(由于我是新注册用户,需要30天才能在论坛上发表提问,所以只好先把问题贴到这来了,希望大家看到了能回复一下 :arrow: )
表结构
RT_ROAD_SECTION JAM_CONFIG
--------------- ------------
RSID <pk>
JAM <fk> >------+ ID <pk>
... ... DESC
表RT_ROAD_SECTION是某个路段的拥堵状况,其中拥堵状况是通过外键JAM关联到配置表JAM_CONFIG。因为这张表不具备实体特性,我只设计了一个实体类:
public class RoadSectionStatus {
int id;
String jam;
... ... // 其它字段及get/set省略
}
其中jam就是JAM_CONFIG里的DESC了。映射文件如下:
<class name="RoadSectionStatus"
table="RT_ROAD_SECTION">
<id name="id" column="RSID" type="integer">
<generator class="assigned" />
</id>
<join table="JAM_CONFIG">
<key column="ID" />
<property name="jam" colunm="DESC" type="string" />
</join>
</class>
Hibernate参考文档里面说join可以把一个实体类映射到多个表,但例子中join的table="ADDRESS"是从表,关联到class对应的主表PERSON。而我这里join的JAM_CONFIG却是主表,我不知道如何去配置。上面的映射文件生成的SQL如下:
select rs.ID, cfg.DESC
from RT_ROAD_SECTION rs
left outer join JAM_CONFIG cfg
on rs.RSID = cfg.ID
显然rs.RSID = cfg.ID不对,应该为rs.JAM = cfg.ID就对了。我于是给RoadSectionStatus加上jamId属性,配置文件中添加:
<property name="jamId" column="JAM" type="integer" />
...
<key column="ID" property-ref="jamId" />
告诉Hibernate是JAM_CONFIG.ID关联到RT_ROAD_SECTION.JAM,而不是关联到主键RSID上(实际应该反过来,是从表外键JAM关联到主表JAM_CONFIG的主键ID上),但是生成出来的结果还是一样。
--希望看一下,看看这个问题该如何解决?
(由于我是新注册用户,需要30天才能在论坛上发表提问,所以只好先把问题贴到这来了,希望大家看到了能回复一下 :arrow: )