论坛首页 入门技术论坛

hibernate 无主键 多表连接 更新数据

浏览 5127 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-12-23   最后修改:2009-12-23
今天遇到一个问题:

客户给了我 3张表;
这三张表 分别是从其他数据库中查出来的数据:

这三张表都没有 id 这个字段:

分别为 A B C  三张表:

在进行hibernate  查询时 ,可以查询 ,但是 更新数据时,就会出现 找不到 id唯一标识 的  错误:
这样 我就为每一个表 在hibernate 映射文件中 添加了联合主键:(来欺骗hibernate  主键);
这样的 单表可以查了! 但是 这三个 表关联到一起 就不行:


这是我的配置文件: 我配置了 所有的属性 都作为 联合主键 (大虾 们可以修改 )
(联合主键 也可以是 其中的几个字段)eg:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<!--

  This mapping of imain base component
    
-->

<hibernate-mapping>

A : 表字段:
<class name="com.iman.nrms.nrmwns.wrm.domain.model.CardType" table="VAL_CARD_TYPES">
<composite-id>
  <key-property name="name" type="java.lang.String">
        <column name="TYPE_NAME" length="50" not-null="true" />
  </key-property>
  <key-property name="realOrder" type="java.lang.Integer">
        <column name="REL_ORDER" length="6"/>
  </key-property>
  <key-property name="subCard" type="java.lang.String">
        <column name="VAL_FOR_SUB_CARD" length="100" />
  </key-property>
</composite-id>
    </class>

B: 表字段:
    <class name="com.iman.nrms.nrmwns.wrm.domain.model.NeToCard" table="EQ_CARD_TYPE_MAP">
    <composite-id>
       <key-many-to-one name="cardName" column="CARD_TYPE" class="com.iman.nrms.nrmwns.wrm.domain.model.CardType">
       </key-many-to-one>
       <key-many-to-one name="equipName" column="EQUIP_TYPE" class="com.iman.nrms.nrmwns.wrm.domain.model.NeType">
       </key-many-to-one>              
       <key-property name="realOrder" type="java.lang.Integer">
            <column name="REL_ORDER" length="6"/>
           </key-property>            
    </composite-id>
    </class>
 
    C: 表字段:
    <class name="com.iman.nrms.nrmwns.wrm.domain.model.NeType" table="EQUIP_TYPES">
    <composite-id>
        <key-property name="name" type="java.long.String">
            <column name="TYPE_NAME" length="30" not-null="true"/>
        </key-property>
        <key-property name="iconName" type="java.long.String">
            <column name="ICON_NAME" length="30"/>
        </key-property>
        <key-property name="realOrder" type="java.lang.Integer">
            <column name="REL_ORDER" length="3"/>
        </key-property>
        <key-property name="suggBeg" type="java.lang.Integer">
            <column name="SUGG_BEG4" length="3"/>
        </key-property>
        <key-property name="suggEnd" type="java.lang.Integer">
            <column name="SUGG_END4" length="3"/>
        </key-property>
        <key-property name="swapCols" type="java.long.String">
            <column name="SWAP_CARD_RESERVED_COLS" length="2000"/>
        </key-property>
      </composite-id>
    </class>
       
  
</hibernate-mapping>


注意: B 表算是一个中间表: 通过 A , C 表的联合主键 在B 表建立联系, 更新A C 表中的数据;

单表的查询 和 更新都是没有问题的,可是 多表连接后就不行!

再次强调: A ,B C 三个表中 是没有 Id 只有 联合主键(这里的配置文件也可以修改,可以 )



注意 B 表中 多对一 关联关系
   发表时间:2009-12-24  
大侠们 ,有没有什么方式可以解决  啊!
0 请登录后投票
   发表时间:2009-12-28  
真的没有解决的办法吗?
我已经把项目 改了 , 不用一对多了  ,简单的一对一 ,项目逼人啊!

谁有 好的方法 写着啊,我把项目优化一下!
0 请登录后投票
   发表时间:2010-01-08  
有 hibernate  高手吗?给个提示吧?  到底hibernate中有没有这样 用的,是不是这样就是 错的@!我在 hibernate 中见到 ,说mang-to-one 或 mang-to-mang中 说必须有id,是不是我这里的id 与 hibernate 内定义的id有冲突!刚刚 入门 程序研究 甚浅,希望老手 给个建议?让我把这个问题解决了吧!就算没有这种用法 ,说一声也可以,

敬  谢!
0 请登录后投票
   发表时间:2010-01-28  
十二郎的解决方案:hibernate支持视图,就是说你可以将你的几张表通过数据库建立3个视图,其中视图中可以有ID字段了。然后在项目中同对待表一样的进行查询。
0 请登录后投票
   发表时间:2010-01-31  
san586 写道
十二郎的解决方案:hibernate支持视图,就是说你可以将你的几张表通过数据库建立3个视图,其中视图中可以有ID字段了。然后在项目中同对待表一样的进行查询。

算是个方法!还有 简单的嘛?
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics