Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 冬眠5+;非JTA数据源:未存储的对象_Java_Hibernate_Jakarta Ee_Persistence_Datasource - Fatal编程技术网

Java 冬眠5+;非JTA数据源:未存储的对象

Java 冬眠5+;非JTA数据源:未存储的对象,java,hibernate,jakarta-ee,persistence,datasource,Java,Hibernate,Jakarta Ee,Persistence,Datasource,我面临一个问题,不知道出了什么问题。该中心: 冬眠5 ApacheTomcat 9 JSF2 没有春天。这很重要,因为我看到这个问题与Spring的使用有关,但这不是我的情况 数据源在Tomcat上正确配置,Hibernate还为每个新实体创建表并正确更新schemma 问题是,当我试图持久化一个新实体时,什么也没有发生。然后我尝试包含“flush()”调用。。。但是我有一个错误,说我没有激活的事务: javax.persistence.TransactionRequiredExceptio

我面临一个问题,不知道出了什么问题。该中心:

  • 冬眠5
  • ApacheTomcat 9
  • JSF2
没有春天。这很重要,因为我看到这个问题与Spring的使用有关,但这不是我的情况

数据源在Tomcat上正确配置,Hibernate还为每个新实体创建表并正确更新schemma

问题是,当我试图持久化一个新实体时,什么也没有发生。然后我尝试包含“flush()”调用。。。但是我有一个错误,说我没有激活的事务:

javax.persistence.TransactionRequiredException:没有正在进行的事务

这似乎是一个与交易要求相关的问题,但我也尝试过:

  • 在方法上包含“@Transactional”注释
  • 在类上包含“@Transactional”注释
  • 使用“beginTransaction()”调用强制开始事务,但我得到了一个空指针
所以。。。我不知道该怎么办

跟随你会看到我的相关代码。你能帮我解决这个问题吗

persistence.xml文件:


Hibernate持久化单元
org.hibernate.jpa.HibernatePersistenceProvider
java:comp/env/jdbc/hospitalDatasource

我的实体:

在我的托管bean上,我有:

和:

它似乎工作正常,但问题发生在这里:

这样,就不会发生任何事情,也不会有例外。什么也没发生:

这样,我就有了“javax.persistence.TransactionRequiredException:没有正在进行的事务”:


我做错了什么?提前谢谢大家

您需要进一步配置
persistence.xml
hibernate.cfg.xml
。您可以参考下面的链接来配置这些xml文件


这一条清楚地解释了问题所在: “javax.persistence.TransactionRequiredException:没有正在进行的事务”

首先,您清楚地提到您正在使用非JTA数据源。这意味着容器将不再为您管理事务边界。您必须自己开始并提交/回滚事务。因此,您需要遵循以下要求:

EntityManager em = ....
EntityTransaction et = em.getTransaction();
try {
    et.begin();
    em.persist(entity);
    et.commit();
} catch (Exception ex) {
    et.rollback();
    throw new RuntimeException(ex);
}

好的,谢谢您的回复@Mayank。但这对我不起作用。我遵循了这个建议,得到了同样的错误:第二个和第三个链接不适用于我的案例,因为它指的是使用Spring或JPA/Hibernate的旧版本。无论如何谢谢你!
@PersistenceUnit
private EntityManagerFactory emf;
protected synchronized EntityManager getEntityManager() {
    if (emf == null) {
        emf = Persistence.createEntityManagerFactory("hospitalPU");
    }
    return emf.createEntityManager();
}
getEntityManager().persist(getDominio());
getEntityManager().persist(getDominio());
getEntityManager().flush(); //exception occours here!
EntityManager em = ....
EntityTransaction et = em.getTransaction();
try {
    et.begin();
    em.persist(entity);
    et.commit();
} catch (Exception ex) {
    et.rollback();
    throw new RuntimeException(ex);
}