Hibernate JavaDoc声明Session.update(Object o)如果已经有一个持久化实例会引发异常o,对吧?
If there is a persistent instance with the same identifier, an exception is thrown.
但是,以下代码在运行时不会抛出任何内容.而且我认为应该!
Email email = new Email("andre", "girafa", "hi");
Session session = factory.openSession();
Transaction tx = session.beginTransaction();
session.save(email);
session.update(email);
session.update(email);
tx.commit();
// didn't throw... Let's try again
tx = session.beginTransaction();
session.update(email);
session.update(email);
tx.commit();
session.close();
// still nothing! :(
Run Code Online (Sandbox Code Playgroud)
正如你可以说,两次我尝试做多update()S,但仍Hibernate的对我采取容易.
有谁有预感为什么?
编辑:它似乎只会抛出另一个等效对象,例如,email2具有相同的ID email.我想文档有点草率.
在SQL语言中,Hibernate中的更新不是UPDATE.Hibernate 通过Session对象中的状态缓存自动处理SQL UPDATE .
但它仅适用于当前会话中加载的实体.此方法,session.update(object)用于将对象从另一个层附加到当前会话以跟踪并最终可能更新.
在你的情况下,它只是一个NOOP.如果:
Email email = new Email("andre", "girafa", "hi");
Session session = factory.openSession();
Transaction tx = session.beginTransaction();
int id = session.save(email);
Email anotherEmail = new Email("", "", "");
anotherEmail.id = id;
session.update(anotherEmail); // will throw
Run Code Online (Sandbox Code Playgroud)
您可以在Hibernate参考上阅读有关更新方法语义的更多信息.
| 归档时间: |
|
| 查看次数: |
1403 次 |
| 最近记录: |