让我们看一个简单的例子,一只狗和一只猫是朋友。这并不是罕见的事情。它比我的商业案例更有趣。
我们想要一个名为"saveFriends"的函数,它需要一个狗的名字和一只猫的名字。我们将先保存狗,然后再保存猫。为了让这个例子工作,猫将会引用回狗。我知道这不是一个理想的例子,但它很可爱,适合我们的目的。
FriendService.java
我们想要一个名为"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 (extends 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会不会导致“非空属性引用了空值或瞬态值”错误?我只是猜测,但我认为这是因为Dog仍然在会话中。
如果这两个示例都无法使用,请解释原因。