Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 在请求结束前休眠提交数据_Java_Hibernate_Jpa_Jboss_Jta - Fatal编程技术网

Java 在请求结束前休眠提交数据

Java 在请求结束前休眠提交数据,java,hibernate,jpa,jboss,jta,Java,Hibernate,Jpa,Jboss,Jta,我在我的web应用程序中使用Hibernate,我需要立即将数据发送到数据库。现在我只能在请求结束时才能看到数据库中的数据,所以我假设我使用的是每请求会话模式,但我从未设置它,这可能是默认行为 web请求可能需要几秒钟,通常是5-6秒钟,同时其他进程可以从数据库读取数据,我可以有不一致的状态 我尝试了一切,但没有成功,这是我更新数据的代码: EntityManager em = EntityMan.getEMF().createEntityManager(); try {

我在我的web应用程序中使用Hibernate,我需要立即将数据发送到数据库。现在我只能在请求结束时才能看到数据库中的数据,所以我假设我使用的是每请求会话模式,但我从未设置它,这可能是默认行为

web请求可能需要几秒钟,通常是5-6秒钟,同时其他进程可以从数据库读取数据,我可以有不一致的状态

我尝试了一切,但没有成功,这是我更新数据的代码:

EntityManager em = EntityMan.getEMF().createEntityManager();       
try {
    em.find(Tel.class, tel.getTelId());
    em.merge(tel);
    em.flush();
} catch (Exception e) {
    logger.debug(e.getMessage());
    e.printStackTrace();
}
我尝试使用session和transaction提交,但并没有按照我所希望的方式工作

EntityManager em = EntityMan.getEMF().createEntityManager();
    try {
        Session session = em.unwrap(Session.class);
        em.close();
        session.beginTransaction();
        session.setFlushMode(FlushMode.COMMIT);
        session.merge(tel);            
        session.getTransaction().commit();
        session.flush();
        session.clear();
        session.close();
    } catch (Exception e) {
        logger.debug(e.getMessage());
        e.printStackTrace();
    }
persistence.xml

<persistence-unit name="MyProject_EJB" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/ds/MyProjectDS</jta-data-source>
<class>....</class>
<class>....</class>

<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
  <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
  <!-- Caching properties -->
  <property name="hibernate.cache.use_second_level_cache" value="true"/>

  <!--<property name="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.SingletonEhCacheProvider" />-->
  <property name="net.sf.ehcache.configurationResourceName" value="ehcache.xml"/>
  <!--<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>-->
  <!--<property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider" />-->
  <property name="hibernate.cache.use_query_cache" value="true"/>
  <property name="hibernate.cache.region.factory_class" value="net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory"/>
  <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
  <property name="hibernate.max_fetch_depth" value="4"/>
  <!--
<property name="hibernate.cache.use_query_cache" value="true"/>
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.jbc2.JndiMultiplexedJBossCacheRegionFactory"/>
<property name="hibernate.cache.region.jbc2.cachefactory" value="java:CacheManager"/>
<property name="hibernate.cache.region.jbc2.cfg.entity" value="mvcc-entity"/>
<property name="hibernate.cache.region.jbc2.cfg.query" value="local-query"/>
<property name="hibernate.show_sql" value="true"/> -->
</properties>

org.hibernate.ejb.HibernatePersistence
java:/ds/MyProjectDS
....
....
假的

在应用程序中如何管理事务(您使用哪种框架)?我使用struts作为web应用程序,其他什么都不用。应用服务器是JBoss。事务类型=“JTA”在持久化.xML.然后简单地在请求中间的某个地方启动一个新嵌套事务,它适合您的需求。第一个代码是我在Action方法中运行的事务,在该代码之后,我有一些服务调用,然后该方法结束。只有当请求范围关闭时,我才能看到数据库中的数据发生了更改。我如何运行一个能够在请求结束前立即关闭自身并使数据持久化的事务?@DraganBozanovic-这不起作用。Hibernate不支持嵌套事务,您会在第二个
beginTransaction()
上抛出一个
IllegalStateException
。您的应用程序中如何管理事务(您使用哪个框架)?我对web应用程序使用struts,其他什么都没有。应用服务器是JBoss。事务类型=“JTA”在持久化.xML.然后简单地在请求中间的某个地方启动一个新嵌套事务,它适合您的需求。第一个代码是我在Action方法中运行的事务,在该代码之后,我有一些服务调用,然后该方法结束。只有当请求范围关闭时,我才能看到数据库中的数据发生了更改。我如何运行一个能够在请求结束前立即关闭自身并使数据持久化的事务?@DraganBozanovic-这不起作用。Hibernate不支持嵌套事务,您会在第二个
beginTransaction()
上抛出一个
IllegalStateException