请求结束前,hibernate提交数据

时间:2016-03-04 16:22:40

标签: java hibernate jpa jboss jta

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

我尝试使用会话和事务提交,但不按照我想要的方式工作

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>

0 个答案:

没有答案