ant*_*ony 10 jpa persist toplink-essentials
我们正在使用JPA + Spring + EJB的Toplink实现.在我们的一个EJB中,我们有这样的东西:
public void updateUser(long userId, String newName){
User u = em.get(User.class, userId);
u.setName(newName);
// no persist is invoked here
}
Run Code Online (Sandbox Code Playgroud)
所以,基本上这个updateUser方法应该更新给定id的用户名.但是这个方法的作者忘了调用em.persist(u);
而最奇怪的是它运作良好.怎么会这样?我100%肯定,如果不调用em.persist()或em.merge(),就无法将更改保存到数据库中.他们可以吗?有可能发生这种情况吗?
谢谢
Hen*_*ing 12
您正在使用托管实体.如果实体未因其实体管理器关闭而脱离,则在刷新/关闭会话并提交事务时,对实体所做的所有更改都会反映到数据库中.
当与实体关联的事务提交时,持久实体的状态将与数据库同步.
编辑是为了清晰和解释:因此,实体在其生命周期中可能存在三种不同的模式:
persist()尚未调用.persist()或从数据库加载,并与实体管理器会话关联.刷新实体管理器会话时,对实体的所有更改都会反映到数据库中.merge()命令显式合并.| 归档时间: |
|
| 查看次数: |
6113 次 |
| 最近记录: |