CDI EntityManager失败

时间:2013-05-08 15:41:29

标签: jpa cdi

Hibernate说:“Hibernate抛出的异常意味着你必须回滚数据库事务并立即关闭Session。”

当persist方法抛出SQLException并且entityManager变脏时,如果我关闭EntityManager,它仍然在Conversation Scope中。

我正在使用:tomcat 7,cdi 1.1,hibernate 4.1;

有没有办法为当前对话生成新的EntityManager来替换脏?

@Produces
@ConversationScoped
public EntityManager create(EntityManagerFactory emf) {
    EntityManager em = emf.createEntityManager();

...

个ViewBean

@Named @ConversationScoped 
public class MyView implements Serializable {
enter code here
@Inject @Getter private EntityManager em;
...
public void persist(){
    try{
        getEm().getTransaction().begin();
        getEm().persist(entityInstance);
        getEm().getTransaction().commit();
    }catch(Exception e){
        e.printStackTrace();
        if(getEm().getTransaction().isActive()){
            getEm().getTransaction().rollback();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

不,没有。无论如何,对话范围对于EntityManager来说都不是一个很好的范围。由于事务边界,它应该是Request或Default。