`
yj0728
  • 浏览: 952 次
  • 性别: Icon_minigender_1
  • 来自: 上海宝信
最近访客 更多访客>>
社区版块
存档分类
最新评论

一个具体类对应多张表的问题?

阅读更多
  在用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天才能在论坛上发表提问,所以只好先把问题贴到这来了,希望大家看到了能回复一下
分享到:
评论

相关推荐

    from 多张表 等于 left join 其他表.

    这实际上是在执行一个内连接操作,只有当KC表的KC_KCBH字段与KCSW表的KCSW_KCBH字段相等,并且KCSW表的KCSW_WLID字段与WL表的WL_WLID字段相等时,才会将三张表中的对应记录组合在一起。 #### LEFT JOIN实现的左连接...

    17 继承(四)每一个具体的类 映射到一张表

    标题中的“17 继承(四)每一个具体的类 映射到一张表”指出,我们将关注的是类继承在Hibernate中的映射策略。在传统的面向对象编程中,继承允许我们创建一个新类(子类)并继承父类的属性和方法,以此实现代码复用和...

    三张表一对多示例

    这种关系类型在实际业务场景中非常常见,例如一个学生可以对应多个课程,一个员工可以有多个项目等。 首先,我们来看这三张表:`ab`、`b`和`c`。 1. 表`ab`: 这个表格似乎是一个组合表,用来表示`a`和`b`之间的...

    如何根据表里的一个字段,查出它属于哪张表

    ### 如何根据表里的一个字段,查出它属于哪张表 在数据库管理与开发过程中,经常需要查询某个特定字段所在的表。这对于了解数据结构、进行数据迁移或编写SQL查询时非常有用。本文将详细介绍如何在SQL Server环境中...

    Activiti23张表详解

    - **索引说明**:通常会创建一个针对`DEPLOYMENT_ID_`字段的索引,以提高查询速度。 ##### 2.2 属性数据表 (act_ge_property) - **简要描述**:存储整个流程引擎级别的属性数据。 - **表结构说明**: - `NAME_`: ...

    建表项目总结最终的88张表导入即可

    88张表的数量表明这是一个相当复杂的应用系统,可能包含了用户管理、商品管理、订单处理、库存控制、支付系统等多个模块。每个模块对应若干张表,通过合理的数据库设计可以保证数据的一致性和完整性,提高系统性能。...

    禅道数据表结构

    - **zt_project**: 作为项目的主表,它与其他多个表关联,形成了项目管理的核心。 这些表共同构成了项目管理和产品发布的基础设施。 ##### 6. zt_project - 项目表 该表是项目管理的核心,记录了项目的各种信息,...

    Oracle中比对2张表之间数据是否一致的几种方法

    首先,在源端创建一个包含主键或唯一非空索引的测试表。例如: ```sql CREATE TABLE test1 (t1 NUMBER PRIMARY KEY, t2 VARCHAR2(128)); ``` 2. **收集统计信息**: 收集表的统计信息,以便于后续对比操作:...

    ContentProvider多表创建

    本教程将深入讲解如何创建一个支持多表操作的ContentProvider。 一、ContentProvider基础 ContentProvider主要包含四个核心方法:query(), insert(), update()和delete(),分别对应数据查询、插入、更新和删除操作...

    Dataset中多个表内容导出在一个Excel的多个Sheet中

    在实际开发过程中,经常会遇到需要将`Dataset`中的多个表导出至一个Excel文件的多个Sheet中的需求。这种需求通常出现在数据分析、报表生成等场景中,对于提高数据处理效率具有重要作用。下面我们就通过具体的示例来...

    淘宝商品分类数据库

    淘宝商品分类数据库是一个用于搭建电商类系统的宝贵资源,包含了丰富的商品分类信息。这个数据库由三张表构成,设计得详尽且全面,总计有2000多条数据,能够支持各种类型的商城系统进行商品分类管理和展示。接下来,...

    2019网络安全等级保护现场执法检查通知 带10张表.zip

    "2019现场执法检查十张表格"可能涵盖了系统安全状况评估、风险评估、安全管理制度、技术防护措施等多个方面,分别对应不同的检查内容。二级1.0标准和三级1.0标准则分别指第二级和第三级网络信息系统的安全保护要求。...

    多表更新sql

    多表更新SQL是指在一个SQL语句中同时更新多个表中的数据。这种技术主要用于处理那些具有紧密关联关系的数据表,比如一对多或多对多的关系。相比于逐一更新每个表,多表更新可以极大地提高效率并简化操作流程。 ####...

    SSH增删改查2张表完整源码

    在描述中提到的"SSH简易增删改查",可能涉及到多个Action,每个对应一个CRUD操作。 Hibernate是ORM(Object-Relational Mapping)框架,它简化了Java应用与数据库之间的交互。通过Hibernate,开发者可以使用对象而...

    Hibernate继承映射一:每个类分层结构一张表

    这意味着,如果一个基类和多个子类存在继承关系,那么数据库中将会有与这些子类数量相等的表,每个表存储其对应类的实例数据。这种方式的优点在于能够清晰地反映出类之间的层次结构,同时也避免了单表策略中子类字段...

    jbpm安装及使用方法

    很明显,一个user对应一个用户,一个group对应一个用户组,它们之间通过membership关联,并且一个user可以属于多个不同类型(type)的group,user和 group之间是多对多的关系。Membership类的role属性个人感觉用途...

    mysql中insert与select的嵌套使用解决组合字段插入问题

    具体情形是:有三张表a、b、c,现在需要从表b和表c中分别查几个字段的值插入到表a中对应的字段。对于这种情况,我们可以使用如下的语句来实现: INSERT INTO db1_name(field1,field2) SELECT field1,field2 FROM ...

    一套C#编写的餐饮管理系统

    至于项目的具体实现,由于只有一个“餐饮系统”的文件名,无法提供更多细节。但通常,这样的项目会包含多个子目录,分别对应不同的模块,如“Models”(模型)、“Controllers”(控制器)、“Views”(视图)、...

    hibernate学习笔记

    - 为每一个实体类创建对应的`.hbm.xml`映射文件,以定义实体类与数据库表之间的映射关系。 6. **集成映射文件到配置文件**: - 在`hibernate.cfg.xml`文件中注册所有的映射文件,确保Hibernate能够在运行时读取...

    中文汉字对应拼音和首字母SQL

    本文主要介绍了如何通过SQL语句来创建一个包含中文汉字及其对应的拼音和拼音首字母的表,并给出了具体的实现示例。通过这样的表,我们可以方便地实现汉字转拼音、拼音首字母检索等功能,这对于开发支持中文处理的...

Global site tag (gtag.js) - Google Analytics