Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.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/11.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-如果没有活动事务,则保存无效_Java_Spring_Hibernate - Fatal编程技术网

Java Hibernate-如果没有活动事务,则保存无效

Java Hibernate-如果没有活动事务,则保存无效,java,spring,hibernate,Java,Spring,Hibernate,我正在使用@Transactional而不是创建TransactionManager对象和调用。有人能给我一个原因,为什么我会得到这个HibernateeException:save在没有活动事务的情况下无效吗 Bean用于sessionFactory和TransactionManager <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean

我正在使用@Transactional而不是创建TransactionManager对象和调用。有人能给我一个原因,为什么我会得到这个HibernateeException:save在没有活动事务的情况下无效吗

Bean用于sessionFactory和TransactionManager

<bean id="sessionFactory"
          class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="configLocation" value="classpath:hibernate.cfg.xml"/>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
</bean>
<bean id="transactionManager"
          class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
</bean>
UserDaoImpl.java

@Service("userService")
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    @Override
    @Transactional
    public void addUser(User user) {
        userDao.addUser(user);
    }
}
@Repository("userDao")
public class UserDaoImpl implements UserDao {

    @Autowired
    private SessionFactory sessionFactory;

    @Override
    public void addUser(User user) {
        sessionFactory.getCurrentSession().save(user);
    }
}
Stacktrace

org.hibernate.HibernateException: save is not valid without active transaction
at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:348)
at com.sun.proxy.$Proxy27.save(Unknown Source)
at com.hemanths.expense.manager.hibernate.dao.impl.UserDaoImpl.addUser(UserDaoImpl.java:19)
at com.hemanths.expense.manager.service.impl.UserServiceImpl.addUser(UserServiceImpl.java:21)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
Hibernate.hbm.xml

<hibernate-configuration>

    <session-factory>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.current_session_context_class">thread</property>
        <property name="connection.url">jdbc:mysql://127.0.0.1:3306/emanager</property>
        <property name="connection.username">root</property>
        <property name="connection.password">password</property>
        <property name="hibernate.c3p0.min_size">5</property>
        <property name="hibernate.c3p0.max_size">20</property>

        <mapping class="com.hemanths.expense.manager.hibernate.entity.User"/>
    </session-factory>

</hibernate-configuration>

com.mysql.jdbc.Driver
org.hibernate.dialogue.mysqldialogue
线
jdbc:mysql://127.0.0.1:3306/emanager
根
密码
5.
20
删除

<property name="hibernate.current_session_context_class">thread</property>
线程
然后尝试删除

<property name="hibernate.current_session_context_class">thread</property>
线程

然后试试

您是否通过将
放在应用程序上下文中激活了
@Transactional
注释?您的spring配置中有吗?我正在运行一个测试。我需要为测试添加注释吗?比如spring中的@ContextConfiguration?是否在HibernateTransactionManager中设置了断点以检查程序是否正在进入事务性AOP?spring配置xml中是否有线程?如果是,请将其删除。您是否通过将
放入应用程序上下文中来激活
@Transactional
注释?您的spring配置中是否有?我正在运行测试。我需要为测试添加注释吗?比如spring中的@ContextConfiguration?是否在HibernateTransactionManager中设置了断点以检查程序是否正在进入事务性AOP?spring配置xml中是否有线程?如果是这样,请将其删除。您能解释一下吗?@Renju,请阅读,特别是这一行:为了确保发生这种情况,这里生成的会话在调用Session.beginTransaction()之后才可用。您能解释一下吗?@Renju,请阅读,特别是这一行:为了确保发生这种情况,在调用Session.beginTransaction()之前,此处生成的会话不可用