hibernate级联更新外键问题

使用级联更新时,通过子表更新始终取不到主表的主键值,导致子表外键值始终是空的,而通过主表更新,子表能够取到所有值,小弟不解到底是怎么回事,请编程达人指教,代码如下:/*添... 使用级联更新时,通过子表更新始终取不到主表的主键值,导致子表外键值始终是空的,而通过主表更新,子表能够取到所有值,小弟不解到底是怎么回事,请编程达人指教,代码如下:
/*添加订单到数据库*/
Order_ order=new Order_();
User user=(User)session.get(Constants.LOGIN_USER);
order.setUserId(user.getUserId());
order=this.orderService.saveOrder(order);

/*添加订单项到数据库*/
List orderitems=(List)session.get(Constants.CART);

//一对多级联更新
Set set=new HashSet(orderitems);
order.setOrderitems(set);
this.orderService.updateOrder(order);

Orderitem orderitem=new Orderitem();
Hotel hotel=new Hotel();
for(int i=0;i < orderitems.size();i++){
orderitem=(Orderitem)orderitems.get(i);
// orderitem.setOrder(order);使用多对一更新的时候始终取不到外键值,而一对多可行
// this.orderitemService.saveOrderitem(orderitem);

/*预定后更新对应酒店的预定次数*/
hotel=this.hotelService.findByHotelId(String.valueOf(orderitem.getHotelId()));
hotel.setTimes(hotel.getTimes()+1);
this.hotelService.updateHotel(hotel);
}

hbm.xml文件
<hibernate-mapping>
<class name="com.myssh.po.Order_" table="order_">
<id name="orderId" type="integer">
<column name="oid" />
<generator class="native" />
</id>
<!-- cascade="all"级联保存,更新,删除附属物。inverse="true"设置关联关系由对方维护。为set属性 -->
<set name="orderitems" cascade="all" inverse="false" lazy="false">
<!-- 相关联主键 -->
<key column="oid"/>
<!-- 设置一对多关联类 -->
<one-to-many class="com.myssh.po.Orderitem"/>
</set>
<property name="userId" type="integer">
<column name="uid" />
</property>
</class>
</hibernate-mapping>

<hibernate-mapping>
<class name="com.myssh.po.Orderitem" table="orderitem">
<id name="orderitemId" type="integer">
<column name="oiid"/>
<generator class="native"/>
</id>
<many-to-one name="order"
column="oid"
class="com.myssh.po.Order_"
cascade="none"
update="false"
insert="false"
not-null="true"
/>
<property name="orderId" type="integer">
<column name="oid"/>
</property>
<property name="hotelId" type="integer">
<column name="hid"/>
</property>
<property name="beginDate" type="date">
<!-- date是否应该配置格式? -->
<column name="begin"/>
</property>
<property name="days" type="integer">
<column name="days"/>
</property>
<property name="type" type="integer">
<column name="type"/>
</property>
</class>
</hibernate-mapping>
展开
 我来答
百度网友57d33d6f5
2010-04-09 · 超过10用户采纳过TA的回答
知道答主
回答量:213
采纳率:0%
帮助的人:61.4万
展开全部
<set name="orderitems" cascade="all" inverse="false" lazy="false">
inverse=true
试试
级联操作 cascade="all" 你的子表配置里是cascade="none"
whereispal5
2010-04-04 · TA获得超过506个赞
知道小有建树答主
回答量:314
采纳率:100%
帮助的人:56.1万
展开全部
<many-to-one name="order"
column="oid"
class="com.myssh.po.Order_"
cascade="none"
update="false"
insert="false"
not-null="true"
/>
子表建立的none的级联
子表更新等操作影响不到父表
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式