【发布时间】:2014-02-09 18:46:23
【问题描述】:
这是我得到的:
public User register(User u) {
em.persist(u);
System.out.println("USER id: " + u.getIduser()); // INFO: USER id: 0
em.flush();
System.out.println("USER id: " + u.getIduser()); // INFO: USER id: 1
return u;
}
即使我省略了对 flush() 的调用,尽管用户 is 仍然存在于数据库中(MySQL,我使用来自 eclipse 的 glasssfish 4)。那么为什么我需要调用flush来设置id(它显然是在方法退出时自动调用的,但说我想在register()中使用id)?
顺便说一句,flush() 被调用的事实是否表明事务正在进行?
更新:这是 EJB 类:
@Stateless
public class UserService {
@PersistenceContext
private EntityManager em;
public User register(User u) {
em.persist(u);
// em.flush(); // not needed - called on exit - maybe I have a
// transaction after all
return u;
}
}
【问题讨论】:
-
UserService 从
@ManagedBean @ViewScoped public class UserController { @EJB private UserService service; }调用。最后我想标题问题的答案是persist()需要是异步的。
标签: jpa entitymanager flush