讓我們看看一個簡單的狗和貓朋友的例子。這並不罕見。它還有比我的商業案例更有趣的好處。瞭解休眠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