这在Hibernate 3.2中是否可行

时间:2009-11-17 00:25:19

标签: hibernate

认为OneToOne映射了2个实体。人和车。一个人可以有一辆车。

我们有一个从数据库加载的Person对象。 我想改变人的车。问题是我没有加载Car对象来使用。相反,我只有Car的ID。使用此车牌ID,是否可以将Person's Car设置为想要的Car(我们拥有它的ID),而无需从DB加载/选择任何Car?而不是保存这个人和它的车到数据库。我不需要任何有关的信息。我只需要告诉Hibernate我希望Person's Car成为拥有该Id的Car。

这可能吗? 对不起如果我的英文sux。 谢谢你的建议。

1 个答案:

答案 0 :(得分:0)

这取决于您的关联的映射方式。

假设它是通过外键(从Person到Car)映射的并且您确定“new”汽车实例确实存在,您可以使用Session.load()方法返回新Car实体的持久代理,然后在Person上设置并保存Person。只要没有急切地获取关联,汽车就不应该被加载:

Person person = ...;
Car newCar = session.load(Car.class, newCarId);
person.setCar(newCar);
session.saveOrUpdate(person);

如果通过主键映射您的关联,则无法开始设置新车。

另一方面,Person to Car在技术上是一对多(Person =所有者)或多对多(Person = driver)关系,而不是一对一。