读书人

spring 管理hibernate事务时报错事务

发布时间: 2013-09-11 17:20:06 作者: rapoo

spring 管理hibernate事务时报错,事务出错
applicationContext.xml如下:

HTML code
    <context:annotation-config />    <context:component-scan base-package="com.itadmin" />    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"        destroy-method="close">        <property name="driverClassName" value="${jdbc.driverClassName}" />        <property name="url" value="${jdbc.url}" />        <property name="username" value="${jdbc.username}" />        <property name="password" value="${jdbc.password}" />    </bean>    <context:property-placeholder location="/WEB-INF/jdbc.properties" />    <bean id="sessionFactory"        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">        <property name="dataSource" ref="dataSource" />        <property name="annotatedClasses"><!-- 将实体类注入annotatedClasses属性 -->            <list>                <value>com.itadmin.model.User</value>                <value>com.itadmin.model.Product</value>                <value>com.itadmin.model.ProductLog</value>                <value>com.itadmin.model.SaleRecord</value>                <value>com.itadmin.model.User</value>            </list>        </property>        <!-- hibernate的一些配置 -->        <property name="hibernateProperties">            <props>                <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>                <prop key="hibernate.show_sql">true</prop>                <prop key="hibernate.format_sql">true</prop>                <prop key="hibernate.current_session_context_class">thread</prop>            </props>        </property>    </bean>    <bean id="loginAction" class="com.itadmin.action.LoginAction">        <property name="userService">            <ref bean="userService"/>         </property>    </bean>          <bean id="logoutAction" class="com.itadmin.action.LogoutAction">    </bean>           <bean id="transactionManager"       class="org.springframework.orm.hibernate3.HibernateTransactionManager">       <property name="sessionFactory">        <ref local="sessionFactory" />       </property>     </bean>         <bean id="txManager"        class="org.springframework.orm.hibernate3.HibernateTransactionManager">        <property name="sessionFactory" ref="sessionFactory" />    </bean>        <tx:annotation-driven transaction-manager="txManager"/></beans>


需要的service如下:

HTML code
package com.itadmin.service;@Service("productService")public class ProductService {    private LogDao logDao;    // private ProductDao productDao = new ProductDao();    // private LogDao logDao = new LogDao();    private ProductDao productDao;    private Map productsMap;    public LogDao getLogDao() {        return logDao;    }    @Transactional    public Product getProductById(int id) {        Product product = productDao.findProductById(id);        return product;    }    public ProductDao getProductDao() {        return productDao;    }    public Map getProductsMap() {        return productsMap;    }    public Map queryAllProduct() {        productsMap = productDao.queryAllProducts();        return productsMap;    }    // 分页时,按页码查询用户信息    @Transactional    public PageResult queryProductByPage(Page page) {        page = PageUtil.createPage(page.getEveryPage(), productDao                .countRecords(), page.getCurrentPage());        List<Product> list = productDao.findProductByPage(page);        // 封装分页信息和记录信息,返回给调用处        PageResult pageResult = new PageResult(page, list);        return pageResult;    }    @Transactional    public List<Product> querySingleProduct(String name) {        List<Product> list = productDao.getProductByName(name);        return list;    }    @Resource    public void setLogDao(LogDao logDao) {        this.logDao = logDao;    }    @Resource    public void setProductDao(ProductDao productDao) {        this.productDao = productDao;    }    public void setProductsMap(Map productsMap) {        this.productsMap = productsMap;    }    @Transactional    public void updateProduct(Product product, ProductLog productLog) {        // productDao.update(product,productLog);        productDao.update(product);        logDao.save(productLog);    }} 



报错信息如下:

Java code
Hibernate:     select        product0_.p_id as p1_1_,        product0_.p_name as p2_1_,        product0_.p_param as p3_1_     from        i_product product0_10:32:34,470 DEBUG com.opensymphony.xwork2.config.ConfigurationManager:57 - Checking ConfigurationProviders for reload.10:32:34,539 ERROR freemarker.runtime:96 - Method public java.lang.String org.hibernate.exception.NestableRuntimeException.getMessage(int) threw an exception when invoked on org.hibernate.HibernateException: createQuery is not valid without active transactionThe problematic instruction:----------==> ${msgs[0][0]} [on line 76, column 25 in org/apache/struts2/dispatcher/error.ftl]----------Java backtrace for programmers:----------freemarker.template.TemplateModelException: Method public java.lang.String org.hibernate.exception.NestableRuntimeException.getMessage(int) threw an exception when invoked on org.hibernate.HibernateException: createQuery is not valid without active transaction    at freemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:130)    at freemarker.ext.beans.SimpleMethodModel.get(SimpleMethodModel.java:138)    at freemarker.core.DynamicKeyName.dealWithNumericalKey(DynamicKeyName.java:111)    at freemarker.core.DynamicKeyName._getAsTemplateModel(DynamicKeyName.java:90)    at freemarker.core.Expression.getAsTemplateModel(Expression.java:89)    at freemarker.core.Expression.getStringValue(Expression.java:93)    at freemarker.core.DollarVariable.accept(DollarVariable.java:76)    at freemarker.core.Environment.visit(Environment.java:208)    at freemarker.core.MixedContent.accept(MixedContent.java:92)    at freemarker.core.Environment.visit(Environment.java:208)    at freemarker.core.IfBlock.accept(IfBlock.java:82)    at freemarker.core.Environment.visit(Environment.java:208)    at freemarker.core.IfBlock.accept(IfBlock.java:82)    at freemarker.core.Environment.visit(Environment.java:208)    at freemarker.core.MixedContent.accept(MixedContent.java:92)    at freemarker.core.Environment.visit(Environment.java:208)    at freemarker.core.Environment.process(Environment.java:188)    at freemarker.template.Template.process(Template.java:237)    at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:703)    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)    at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)    at java.lang.Thread.run(Thread.java:619)Caused by: java.lang.NullPointerException    at freemarker.ext.beans.SimpleMemberModel.unwrapArguments(SimpleMemberModel.java:85)    at freemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:106)    ... 32 more2012-4-18 10:32:34 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.service() for servlet default threw exceptionjava.lang.IllegalStateException    at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407)    at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:707)    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)    at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)    at java.lang.Thread.run(Thread.java:619) 



请大家指教。

[解决办法]
Caused by: java.lang.NullPointerException
at freemarker.ext.beans.SimpleMemberModel.unwrapArguments(SimpleMemberModel.java:85)
[解决办法]
空指针异常,是你的SimpleMemberModel.java:85中那个参数没有值为null了。

读书人网 >J2EE开发

热点推荐