【问题标题】:CDI EntityManager failCDI EntityManager 失败
【发布时间】:2013-05-08 15:41:29
【问题描述】:

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();
        }
    }
}

【问题讨论】:

    标签: jpa cdi


    【解决方案1】:

    不,没有。无论如何,对话范围对于 EntityManager 来说并不是一个很好的范围。由于事务边界,它实际上应该是请求或默认。

    【讨论】:

      猜你喜欢
      • 2012-03-01
      • 2019-08-15
      • 2016-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 2015-08-25
      • 2018-07-31
      相关资源
      最近更新 更多