Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate 4 Spring 4无法获取当前线程的事务同步会话_Java_Spring_Hibernate - Fatal编程技术网

Java Hibernate 4 Spring 4无法获取当前线程的事务同步会话

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

xml:


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"/>