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

今天遇到一个问题:

客户给了我 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 表中 多对一 关联关系
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值