问题背景是这样的:现在我有两个表,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对一对一更新的机制是怎么样的?
你首先先要解除桌子一和电脑一之间的关联,然后试试用有主键的一方进行关联computer.setDesk(desk);
你好。一定要先解除关联吗? 为什么一定要用有主键的一方?我尝试过desk.setComputer(computer),这样做还是无法更新。请问这跟hibernate机制有关吗?
"desk属性: String desk_id 和 Computer computer。" 把“Computer computer” 去掉试试,对应的computerId在.xml文件里配置成one-to-one 的 然后在computer.setDesk(desk) 调用应该就可以了吗