首页 新闻 会员 周边

SSH关于hibernate 一对一映射 关系更新问题。

0
悬赏园豆:200 [已解决问题] 解决于 2017-02-15 10:34

问题背景是这样的:现在我有两个表,Desk和Computer,需要建立一对一关系,一张桌子上只能有一台电脑,一台电脑只能在一张桌子上。

desk属性: String desk_id 和 Computer computer。

Computer属性:String computer_id和Desk desk。

hibernate配置文件是:

Desk中:<one-to-one  name="computer" class="org.gxl.entity.Computer" property-ref="desk"></one-to-one> 。

Computer中:<many-to-one  name="desk" class="org.gxl.entity.Desk" column="desk_id" unique="true"></many-to-one> 。

映射到数据库表中,desk表的字段是desk_id一个,computer表中除了一个computer_id外还有外键desk_id这个属性。

问题来了:

在进行更新时,桌子一与电脑一已经建立了一对一的联系,我现在想让桌子一和电脑二建立一对一联系。我在更新时的主要带码是这样的

    Desk desk =***;//取到原本的desk

    desk.setComputer(computer)//把桌子和电脑二建立联系

    HibernateTemplate template = super.getHibernateTemplate();
            template.setFlushMode(HibernateTemplate.FLUSH_EAGER);
            template.update(desk);

。这样做更新不了。

这样子为什么更新不了呢? 是因为桌子一和电脑一之间的联系没解除?还是说只能由Computer才能computer.setDesk(..)呢?

对hibernate理解不是很深,请问hibernate对一对一更新的机制是怎么样的?

上街、找金莎的主页 上街、找金莎 | 初学一级 | 园豆:48
提问于:2015-01-10 16:56
< >
分享
最佳答案
0

你首先先要解除桌子一和电脑一之间的关联,然后试试用有主键的一方进行关联computer.setDesk(desk);

收获园豆:200
偶my耶 | 菜鸟二级 |园豆:406 | 2015-01-12 16:59

你好。一定要先解除关联吗? 为什么一定要用有主键的一方?我尝试过desk.setComputer(computer),这样做还是无法更新。请问这跟hibernate机制有关吗?

上街、找金莎 | 园豆:48 (初学一级) | 2015-01-12 18:02
其他回答(1)
0

"desk属性: String desk_id 和 Computer computer。" 把“Computer computer” 去掉试试,对应的computerId在.xml文件里配置成one-to-one 的   然后在computer.setDesk(desk) 调用应该就可以了吗

羽翼深蓝 | 园豆:204 (菜鸟二级) | 2015-01-30 10:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册