让我们看看一个简单的狗和猫朋友的例子。这并不罕见。它还有比我的商业案例更有趣的好处。了解休眠saveOrUpdate和持久生命周期
我们需要一个名为“saveFriends”的函数,它需要一个狗的名字和一个猫的名字。我们将保存狗和猫。为了这个例子的工作,猫将会有一个参考回到狗。我知道这不是一个理想的例子,但它很可爱,适用于我们的目的。
FriendService.java
public int saveFriends(String dogName, String catName) {
Dog fido = new Dog();
Cat felix = new Cat();
fido.name = dogName;
fido = animalDao.saveDog(fido);
felix.name = catName;
[ex.A]felix.friend = fido;
[ex.B]felix.friend = animalDao.getDogByName(dogName);
animalDao.saveCat(felix);
}
AnimalDao.java(延伸的HibernateDaoSupport)现在
public Dog saveDog(Dog dog) {
getHibernateTemplate().saveOrUpdate(dog);
return dog
}
public Cat saveCat(Cat cat) {
getHibernateTemplate().saveOrUpdate(cat);
return cat;
}
public Dog getDogByName(String name) {
return (Dog) getHibernateTemplate().find("from Dog where name=?", name).get(0);
}
,假设一分钟,我想为使用实施例A或例子B保存我的朋友。一个比另一个更好用吗?
此外,不会举例B让你臭名昭着的“非空属性引用空值或瞬态值”错误?我只是在这里猜测,但我会认为这是因为狗仍然在会议中。
我会理解这些例子是否都不起作用,但请解释原因。
这些实体的标识符是什么? – mdma 2010-06-15 20:58:08
@mdma我想我们可以说他们有通常的“id”字段作为标识符。 – Stephano 2010-06-15 22:27:45
@Sephano - 谢谢 - 我不得不问 - 可能是因为名字被用作id--目前还不清楚saveFriends是否正在创建新的瞬变并持续它们,或者可能更新现有的持久实体(来自名称。 ) – mdma 2010-06-15 22:38:43