什么时候
- 我通过无状态服务从数据库中获取实体,
- 然后在另一个bean中修改它并
- 然后想通过无状态服务将其保存到数据库中,
我注意到实体已经分离。我认为因为无状态服务的持久化上下文,实体是从被抓住的来的存在的。但是应该使用有状态服务吗?
现在,在保存时,我EntityManager#find(ClassOfDetachedEntity,PrimaryKeyOfDetachedEntity)
用来获取对数据库中实体的引用,然后将分离的实体分配给它。
但这就是方式吗?
在我只将副本保存到数据库之前,虽然我只是想修改现有条目。
更新(显示“分离”问题发生位置的快速示例):
@Stateless
@Log
public class DatabaseService implements Serializable {
@PersistenceContext
EntityManager em;
public List<Category> getCategories() {
return em.createQuery("SELECT c FROM Category c").getResultList();
}
public void checkIfDetached(Object o){
log.info("is detached: " + String.valueOf(!em.contains(o)));
}
}
bean 日志语句会告诉我,对象已分离:
@ManagedBean
@ViewScoped
public class CategoriesBean implements Serializable {
private Category testCategory;
@PostConstruct
public void init(){
testCategory = dbs.getCategories().get(0);
dbs.checkIfDetached(testCategory);
}
}