Java Hibernate 4 Spring 4无法获取当前线程的事务同步会话
xml:Java Hibernate 4 Spring 4无法获取当前线程的事务同步会话,java,spring,hibernate,Java,Spring,Hibernate,xml: org.hibernate.dialogue.mysqldialogue 真的 更新 真的 org.springframework.orm.hibernate4.SpringSessionContext 错误: 信息:使用数据源[org.apache.commons.dbcp]。BasicDataSource@6098b14d]HibernateTransactionManager的Hibernate SessionFactory版本 线程“main”org.hibernate.H
org.hibernate.dialogue.mysqldialogue
真的
更新
真的
org.springframework.orm.hibernate4.SpringSessionContext
错误:
信息:使用数据源[org.apache.commons.dbcp]。BasicDataSource@6098b14d]HibernateTransactionManager的Hibernate SessionFactory版本
线程“main”org.hibernate.HibernateException中出现异常:无法获取当前线程的事务同步会话
如果:
hibernate.current\u session\u context\u类集“thread”
然后:如果没有活动事务,则保存无效
我该怎么办呢?您没有在spring上下文中创建“Init”对象,因此spring永远不会有机会使用管理事务的注释在方法周围包装代理
试着把你的班级改成
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="com.warmmer.bean" />
<property name="hibernateProperties">
<!-- <value> hibernate.dialect=org.hibernate.dialect.HSQLDialect </value> -->
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
</props>
</property>
</bean>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="txManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven transaction-manager="txManager" />
现在,您可能需要将以下内容添加到您的bean文件中,以便它找到您的存储库
package my.pkg;
// Imports etc
@Repository
public class Init {
@Autowired
private SessionFactory sessionFactory;
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "Spring_Hibernate.xml" });
Init init = context.getBean(Init.class);
init.addUser();
}
@Transactional
private void addUser() {
Session session = sessionFactory.getCurrentSession();
User user = new User();
user.setName("123");
session.save(user);
// session.close(); DON'T NEED THESE!
// sf.close();
}
}
记不得@Transactional是否适用于私有方法,如果不行,请尝试将该方法公开…线程“main”org.springframework.orm.hibernate4.HibernateSystemException中的异常:请求的未知服务[org.hibernate.stat.spi.StatisticsImplementor];嵌套异常是org.hibernate.service.UnknownServiceException:org.springframework.orm.hibernate4.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:218)上请求的未知服务[org.hibernate.stat.spi.StatisticsImplementor]尝试摆脱session.close()和sf.close()-@Transactional stuff为您处理此问题
package my.pkg;
// Imports etc
@Repository
public class Init {
@Autowired
private SessionFactory sessionFactory;
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "Spring_Hibernate.xml" });
Init init = context.getBean(Init.class);
init.addUser();
}
@Transactional
private void addUser() {
Session session = sessionFactory.getCurrentSession();
User user = new User();
user.setName("123");
session.save(user);
// session.close(); DON'T NEED THESE!
// sf.close();
}
}
<context:component-scan base-package="my.pkg"/>