- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
让我们看一个简单的例子,一只狗和一只猫是 friend 。这种情况并不罕见。它还具有比我的业务案例有趣得多的好处。
我们想要一个名为“saveFriends”的函数,它接受狗的名字和猫的名字。我们先救狗,然后救猫。为了让这个例子起作用,猫将有一个对狗的引用。我知道这不是一个理想的例子,但它很可爱并且适合我们的目的。
friend 服务.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 来拯救我的 friend 。一个比另一个更好用吗?
此外,示例 B 不会让您遇到臭名昭著的“非空属性引用空值或 transient 值”错误吗?我只是在这里猜测,但我认为这是因为 Dog 仍在 session 中。
如果这些示例都不起作用,我会理解,但请解释原因。
最佳答案
Now, assume for a minute that I would like to use either example A or example B to save my friend. Is one better than the other to use?
这两个示例都可以工作(在示例 B 中,Hibernate 将 flush the session before query executions 所以它会在选择之前插入狗)但是当您已经有了狗时,我看不到进行额外选择(示例 B)的意义实例。我会以 A 为例。
Furthermore, won't example B get you the infamous "not-null property references a null or transient value" error?
否(见上文)。在示例 B 中,狗不再是短暂的。在示例 A 中,插入将以正确的顺序完成。
I'm only guessing here but I would think this is because the Dog is still in the session.
一级缓存(session)用于通过id查找,这里不是。
关于java - 了解 Hibernate saveOrUpdate 和持久化生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3048540/
我正在开发一个使用多个 turtle 的滚动游戏。玩家 turtle 根据按键命令在 Y 轴上移动。当危害和好处在 X 轴上移动时,然后循环并改变 Y 轴位置。我尝试定义一个名为 colliding(
我不明白为什么他们不接受这个作为解决方案,他们说这是一个错误的答案:- #include int main(void) { int val=0; printf("Input:- \n
我正在使用基于表单的身份验证。 我有一个注销链接,如下所示: 以及对应的注销方法: public String logout() { FacesContext.getCurren
在 IIS7 应用程序池中有一个设置 Idle-time out 默认是 20 分钟,其中说: Amount of time(in minutes) a worker process will rem
我是一名优秀的程序员,十分优秀!