java - java如何解决:org.hibernate.HibernateException: createCriteria在没有活动事务的情况下无效

  显示原文与译文双语对照的内容
70 0

我正在学习 spring 4.0 + Hibernate 4.3集成,我对两种技术都非常新。 我在解决以前的问题。 任何人请指导我完成这项。

applicationContext.xml


<?xml version='1.0' encoding='UTF-8'?>


<!-- was: <?xml version="1.0" encoding="UTF-8"?> -->


<beans xmlns="http://www.springframework.org/schema/beans"


 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"


 xmlns:p="http://www.springframework.org/schema/p"


 xmlns:context="http://www.springframework.org/schema/context"


 xmlns:mvc="http://www.springframework.org/schema/mvc"


 xsi:schemaLocation="http://www.springframework.org/schema/beans 


 http://www.springframework.org/schema/beans/spring-beans-4.0.xsd


 http://www.springframework.org/schema/context 


 http://www.springframework.org/schema/context/spring-context-4.0.xsd


 http://www.springframework.org/schema/mvc 


 http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">



 <!--bean id="propertyConfigurer"


 class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"


 p:location="/WEB-INF/jdbc.properties"/>



<bean id="dataSource"


 class="org.springframework.jdbc.datasource.DriverManagerDataSource"


 p:driverClassName="${jdbc.driverClassName}"


 p:url="${jdbc.url}"


 p:username="${jdbc.username}"


 p:password="${jdbc.password}"/-->



 <!-- ADD PERSISTENCE SUPPORT HERE (jpa, hibernate, etc) -->



</beans>



dispatcher-servlet.xml


<?xml version='1.0' encoding='UTF-8'?>


<!-- was: <?xml version="1.0" encoding="UTF-8"?> -->


<beans xmlns="http://www.springframework.org/schema/beans"


 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"


 xmlns:p="http://www.springframework.org/schema/p"


 xmlns:context="http://www.springframework.org/schema/context"


 xmlns:mvc="http://www.springframework.org/schema/mvc"


 xsi:schemaLocation="http://www.springframework.org/schema/beans 


 http://www.springframework.org/schema/beans/spring-beans-4.0.xsd


 http://www.springframework.org/schema/context 


 http://www.springframework.org/schema/context/spring-context-4.0.xsd


 http://www.springframework.org/schema/mvc 


 http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">



 <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>


 <context:component-scan base-package="com.controller"/>


 <mvc:annotation-driven/>



 <!--


 Most controllers will use the ControllerClassNameHandlerMapping 上面, but


 for the index controller we are using ParameterizableViewController, so we must


 define an explicit mapping for it.


 -->


 <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">


 <property name="mappings">


 <props>


 <prop key="index.htm">indexController</prop>


 </props>


 </property>


 </bean>



 <bean id="viewResolver"


 class="org.springframework.web.servlet.view.InternalResourceViewResolver"


 p:prefix="/WEB-INF/jsp/"


 p:suffix=".jsp"/>



 <!--


 The index controller.


 -->


 <bean name="indexController"


 class="org.springframework.web.servlet.mvc.ParameterizableViewController"


 p:viewName="index"/>



</beans>



hibernate.cfg.xml


<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">


<hibernate-configuration>


 <session-factory>


 <property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property>


 <property name="hibernate.connection.username">scott</property>


 <property name="hibernate.connection.password">tiger</property>


 <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>


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


 <mapping resource="com/entity/EmpTest.hbm.xml"/>


 </session-factory>


</hibernate-configuration>



EmpModelImpl.java


/*


 * To change this license header, choose License Headers in Project Properties.


 * To change this template file, choose Tools | Templates


 * and open the template in the editor.


 */


package com.model;



import com.entity.EmpTest;


import com.util.HibernateUtil;


import java.math.BigDecimal;


import java.util.List;


import org.hibernate.SessionFactory;


import org.springframework.stereotype.Repository;



@Repository


public class EmpModelImp {



 private SessionFactory session;



 public void add(EmpTest emp) {


 session=HibernateUtil.getSessionFactory();


 session.getCurrentSession().save(emp);//throw new UnsupportedOperationException("Not supported yet.");//To change body of generated methods, choose Tools | Templates.


 }



 public void updateEmp(EmpTest emp) {


 session=HibernateUtil.getSessionFactory();


 session.getCurrentSession().update(emp);//throw new UnsupportedOperationException("Not supported yet.");//To change body of generated methods, choose Tools | Templates.


 }



 public void delete(BigDecimal EmpId) {


 session=HibernateUtil.getSessionFactory();


 session.getCurrentSession().delete(getEmp(EmpId));//throw new UnsupportedOperationException("Not supported yet.");//To change body of generated methods, choose Tools | Templates.


 }



 public EmpTest getEmp(BigDecimal EmpId) {


 session=HibernateUtil.getSessionFactory();


 return (EmpTest) session.getCurrentSession().get(EmpTest.class, EmpId);////throw new UnsupportedOperationException("Not supported yet.");//To change body of generated methods, choose Tools | Templates.


 }



 public List<EmpTest> getAll() {


 session=HibernateUtil.getSessionFactory();


 return session.getCurrentSession().createCriteria("from emptest").list();//throw new UnsupportedOperationException("Not supported yet.");//To change body of generated methods, choose Tools | Templates.


 }



}



EmpServiceImpl.java


/*


 * To change this license header, choose License Headers in Project Properties.


 * To change this template file, choose Tools | Templates


 * and open the template in the editor.


 */


package com.model;



import com.entity.EmpTest;


import java.math.BigDecimal;


import java.util.List;


import org.springframework.stereotype.Service;


import org.springframework.transaction.annotation.Transactional;



@Service


public class EmpServiceImpl {


 private EmpModelImp dao; 



 public EmpServiceImpl() {


 this.dao = new EmpModelImp();


 }


 @Transactional


 public void add(EmpTest emp) {


 dao.add(emp);


 }



 @Transactional


 public void updateEmp(EmpTest emp) {


 dao.updateEmp(emp);


 }



 @Transactional


 public void delete(BigDecimal EmpId) {


 dao.delete(EmpId);


 }



 @Transactional


 public EmpTest getEmp(BigDecimal EmpId) {


 return dao.getEmp(EmpId);


 }



 @Transactional


 public List<EmpTest> getAll() {


 return dao.getAll();


 }


}



我得到了以下异常。


org.hibernate.HibernateException: createCriteria is not valid without active transaction


 org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:352)


 com.sun.proxy.$Proxy98.createCriteria(Unknown Source)


 com.model.EmpModelImp.getAll(EmpModelImp.java:51)


 com.model.EmpServiceImpl.getAll(EmpServiceImpl.java:47)



时间: 原作者:

...