在用Spring + Hibernate重做公司以前的一个项目时,因为数据库都是遗留系统的,做数据映射遇到这么一个问题:
表结构
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天才能在论坛上发表提问,所以只好先把问题贴到这来了,希望大家看到了能回复一下
)
分享到:
相关推荐
这实际上是在执行一个内连接操作,只有当KC表的KC_KCBH字段与KCSW表的KCSW_KCBH字段相等,并且KCSW表的KCSW_WLID字段与WL表的WL_WLID字段相等时,才会将三张表中的对应记录组合在一起。 #### LEFT JOIN实现的左连接...
标题中的“17 继承(四)每一个具体的类 映射到一张表”指出,我们将关注的是类继承在Hibernate中的映射策略。在传统的面向对象编程中,继承允许我们创建一个新类(子类)并继承父类的属性和方法,以此实现代码复用和...
这种关系类型在实际业务场景中非常常见,例如一个学生可以对应多个课程,一个员工可以有多个项目等。 首先,我们来看这三张表:`ab`、`b`和`c`。 1. 表`ab`: 这个表格似乎是一个组合表,用来表示`a`和`b`之间的...
### 如何根据表里的一个字段,查出它属于哪张表 在数据库管理与开发过程中,经常需要查询某个特定字段所在的表。这对于了解数据结构、进行数据迁移或编写SQL查询时非常有用。本文将详细介绍如何在SQL Server环境中...
- **索引说明**:通常会创建一个针对`DEPLOYMENT_ID_`字段的索引,以提高查询速度。 ##### 2.2 属性数据表 (act_ge_property) - **简要描述**:存储整个流程引擎级别的属性数据。 - **表结构说明**: - `NAME_`: ...
88张表的数量表明这是一个相当复杂的应用系统,可能包含了用户管理、商品管理、订单处理、库存控制、支付系统等多个模块。每个模块对应若干张表,通过合理的数据库设计可以保证数据的一致性和完整性,提高系统性能。...
- **zt_project**: 作为项目的主表,它与其他多个表关联,形成了项目管理的核心。 这些表共同构成了项目管理和产品发布的基础设施。 ##### 6. zt_project - 项目表 该表是项目管理的核心,记录了项目的各种信息,...
本教程将深入讲解如何创建一个支持多表操作的ContentProvider。 一、ContentProvider基础 ContentProvider主要包含四个核心方法:query(), insert(), update()和delete(),分别对应数据查询、插入、更新和删除操作...
首先,在源端创建一个包含主键或唯一非空索引的测试表。例如: ```sql CREATE TABLE test1 (t1 NUMBER PRIMARY KEY, t2 VARCHAR2(128)); ``` 2. **收集统计信息**: 收集表的统计信息,以便于后续对比操作:...
在实际开发过程中,经常会遇到需要将`Dataset`中的多个表导出至一个Excel文件的多个Sheet中的需求。这种需求通常出现在数据分析、报表生成等场景中,对于提高数据处理效率具有重要作用。下面我们就通过具体的示例来...
淘宝商品分类数据库是一个用于搭建电商类系统的宝贵资源,包含了丰富的商品分类信息。这个数据库由三张表构成,设计得详尽且全面,总计有2000多条数据,能够支持各种类型的商城系统进行商品分类管理和展示。接下来,...
"2019现场执法检查十张表格"可能涵盖了系统安全状况评估、风险评估、安全管理制度、技术防护措施等多个方面,分别对应不同的检查内容。二级1.0标准和三级1.0标准则分别指第二级和第三级网络信息系统的安全保护要求。...
多表更新SQL是指在一个SQL语句中同时更新多个表中的数据。这种技术主要用于处理那些具有紧密关联关系的数据表,比如一对多或多对多的关系。相比于逐一更新每个表,多表更新可以极大地提高效率并简化操作流程。 ####...
在描述中提到的"SSH简易增删改查",可能涉及到多个Action,每个对应一个CRUD操作。 Hibernate是ORM(Object-Relational Mapping)框架,它简化了Java应用与数据库之间的交互。通过Hibernate,开发者可以使用对象而...
这意味着,如果一个基类和多个子类存在继承关系,那么数据库中将会有与这些子类数量相等的表,每个表存储其对应类的实例数据。这种方式的优点在于能够清晰地反映出类之间的层次结构,同时也避免了单表策略中子类字段...
很明显,一个user对应一个用户,一个group对应一个用户组,它们之间通过membership关联,并且一个user可以属于多个不同类型(type)的group,user和 group之间是多对多的关系。Membership类的role属性个人感觉用途...
具体情形是:有三张表a、b、c,现在需要从表b和表c中分别查几个字段的值插入到表a中对应的字段。对于这种情况,我们可以使用如下的语句来实现: INSERT INTO db1_name(field1,field2) SELECT field1,field2 FROM ...
至于项目的具体实现,由于只有一个“餐饮系统”的文件名,无法提供更多细节。但通常,这样的项目会包含多个子目录,分别对应不同的模块,如“Models”(模型)、“Controllers”(控制器)、“Views”(视图)、...
- 为每一个实体类创建对应的`.hbm.xml`映射文件,以定义实体类与数据库表之间的映射关系。 6. **集成映射文件到配置文件**: - 在`hibernate.cfg.xml`文件中注册所有的映射文件,确保Hibernate能够在运行时读取...
本文主要介绍了如何通过SQL语句来创建一个包含中文汉字及其对应的拼音和拼音首字母的表,并给出了具体的实现示例。通过这样的表,我们可以方便地实现汉字转拼音、拼音首字母检索等功能,这对于开发支持中文处理的...