hibernate3版本中引入tidb的数据源后报事务的错误

【 TiDB 使用环境】测试
【 TiDB 版本】8.10
【复现路径】hibernate配置数据源
【遇到的问题:问题现象及影响】
org.hibernate.HibernateException: createCriteria is not valid without active transaction
at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:297)
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】
怎么这个session…getCurrentSession(),以及createCriteria总是报错呢,跟事务相关?还是版本api不支持呢?

hibernate 有外联Session管理的问题,这个要看怎么控制的。

另外 tidb 有自己独立的 jdbc connector ,可以更换后在试试

1 个赞

我配置了sessionfactory,我的hibernate是3.1版本,不知道是不是也有问题,配置是这样的

<bean id="tidbHibernateSessionFactory"
	  class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
	<property name="dataSource" ref="tidbMpaperDataSource" />
	<property name="annotatedClasses">
		<list>
			<value>com.wap.sh.mpaper.model.NewsContent</value>
			<value>com.wap.sh.mpaper.model.NewsTVInfo</value>
			<value>com.wap.sh.mpaper.model.NewsSourceType</value>
		</list>
	</property>
	<property name="hibernateProperties">
		<value>
			hibernate.show_sql=false
			hibernate.format_sql=true
			hibernate.dialect=org.hibernate.dialect.MySQLDialect
			hibernate.cache.use_second_level_cache=false
			hibernate.cache.use_query_cache=false
			hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
			hibernate.current_session_context_class=thread
		</value>
	</property>

	<!-- *SPRING统一管理二级缓存配置 -->
	<property name="entityCacheStrategies">
		<props>
			<prop key="com.wap.sh.mpaper.model.NewsContent">nonstrict-read-write</prop>
			<prop key="com.wap.sh.mpaper.model.NewsTVInfo">nonstrict-read-write</prop>
			<prop key="com.wap.sh.mpaper.model.NewsSourceType">nonstrict-read-write</prop>
		</props>
	</property>
</bean>

https://stackoverflow.com/questions/35290962/hibernate-createcriteria-is-not-valid-without-active-transaction

自己看吧,需要

@Transactional

或者显示的开启事务。