我在我的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>