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

问题背景是这样的:现在我有两个表,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对一对一更新的机制是怎么样的?

泛舟湖上清波郎朗
浏览 583回答 2
2回答

慕田峪7331174

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

婷婷同学_

"desk属性: String desk_id 和 Computer computer。" 把“Computer computer” 去掉试试,对应的computerId在.xml文件里配置成one-to-one 的   然后在computer.setDesk(desk) 调用应该就可以了吗
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java