JTASessionContext 与 JDBCTransactionFactory 一起使用;使用 getCurrentSession() 无法正确操作自动刷新
Posted
技术标签:
【中文标题】JTASessionContext 与 JDBCTransactionFactory 一起使用;使用 getCurrentSession() 无法正确操作自动刷新【英文标题】:JTASessionContext being used with JDBCTransactionFactory; auto-flush will not operate correctly with getCurrentSession() 【发布时间】:2013-01-22 10:39:41 【问题描述】:在我的应用程序中使用休眠,并且每次我执行事务时,都会收到此警告。它正在向我的日志发送垃圾邮件。
JTASessionContext being used with JDBCTransactionFactory; auto-flush will not operate correctly with getCurrentSession()
我认为这是由hibernate.current_session_context_class
property 引起的。
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property>
<property name="hibernate.connection.pool_size">5</property>
<property name="show_sql">false</property>
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
<property name="hibernate.current_session_context_class">jta</property>
<mapping class="foo.bar.Class1" />
<mapping class="foo.bar.Class2" />
<mapping class="foo.bar.Class3" />
<mapping class="foo.bar.Class4" />
<mapping class="foo.bar.Class5" />
</session-factory>
这是我应该担心的事情吗?如果没有,我怎样才能阻止出现警告。
【问题讨论】:
需要看你完整的hibernate配置文件或者你完整的据我所知,除非您提供 persistence.xml 以将数据源配置为 JTA,否则无法使用 Spring 配置带有 JTA 支持的 Hibernate JPA。 也许这样的事情会帮助你摆脱警告:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="something" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>blah blah</jta-data-source>
<properties>
<property name="hibernate.archive.autodetection" value="class"/>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.current_session_context_class" value="jta"/>
<property name="hibernate.transaction.manager_lookup_class" value="blah blah"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
<property name="hibernate.connection.release_mode" value="after_statement"/>
</properties>
</persistence-unit>
</persistence>
我还建议您禁用 allowLocalTransactions,以便您的代码始终作为事务性运行。
【讨论】:
如何加载配置我的项目以从persistence.xml
加载内容?
我想你的 applicationContext 中已经有一个 'entityManager' bean。然后在其中添加以下属性:Spring
不是东西吗?
我的错,我以为你使用的是 Spring 框架 :) 所以只需用上面的 xml 替换你的 hibernate 配置。当然,添加必要的属性。
当我拥有旧的休眠配置文件时,对于每个文件我必须像原始帖子一样提供映射,我该如何在 persistence.xml 中做到这一点?以上是关于JTASessionContext 与 JDBCTransactionFactory 一起使用;使用 getCurrentSession() 无法正确操作自动刷新的主要内容,如果未能解决你的问题,请参考以下文章