Давайте рассмотрим простой пример собаки и кошки, которые являются друзьями.Это не редкое явление.Он также имеет преимущество в том, что он гораздо интереснее моего бизнес-кейса.
Нам нужна функция с именем 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 к печально известной ошибке "not-null свойство ссылается на нулевое или временное значение"?Я только догадываюсь здесь, но я думаю, что это потому, что Пес все еще находится на сессии.
Я пойму, если ни один из этих примеров не сработает, но, пожалуйста, объясните, почему.