我有容器管理事務無狀態會話Bean。我想在創建(保留)數據庫後返回非託管實體。這就是我要做的事:爲什麼實體無法找到,如果我堅持後分離
@Stateless
public class MyBean {
@EJB(name="MyController")
private MyController myController;
public MyEntity create(MyEntity entity) {
//...
myController.create(entity);
myController.preTransfer(entity);
return entity;
}
}
@Stateless
public class MyController {
@PersistenceContext(unitName = "myPU")
private EntityManager em;
public void create(MyEntity entity) {
//...
em.persist(entity);
}
public void preTransfer(MyEntity entity) {
if (em.contains(entity)) {
em.detach(entity);
}
//...
}
}
我打電話MyBean.create,實體成功堅持和MyBean.create返回非託管的實體,這是確定。但下一次當我嘗試通過id檢索此實體時,找不到它。如果我評論detach,可以找到實體,但是MyBean.create在這種情況下返回管理實體。我錯在哪裏?
我需要分離實體,因爲我需要在從業務方法返回之前設置實體的某些字段 –
聽起來像要返回數據傳輸對象而不是實體。爲什麼你會返回一個不代表數據庫狀態的實體? –
@TuukkaMustonen只是爲了獲得分離的實體而引入DTO是一個非常糟糕的主意,除非它是EJB 2.1或更早的版本(但它不在這裏)。你爲什麼認爲實體是可序列化的? – MaDa