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了。