`

spring1.2整合hibernate3的事务配置

阅读更多

最近做ssh组合的练习,实现一个用户管理模块,具有用户登陆,注册,用户信息修改三个功能,用户登陆时一切正常,注册新用户时出现错误,现问题已经解决,特备忘分享给像我一样的新手。

UserDao

package com.javasky.photo.dao;

import java.util.List;

import com.javasky.photo.model.User;

public interface UserDao {
	//根据主键查找用户
	public User findById(String id);
	//根据用户名查找
	public User getUserByUserName(String username);
	//保存用户
	public void saveUser(User user);
	//删除用户
	public void deleteUser(User user);
}

 

UserDaoHibernate

package com.javasky.photo.dao.hibernate;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.javasky.photo.dao.UserDao;
import com.javasky.photo.model.User;

public class UserDaoHibernate extends HibernateDaoSupport implements UserDao {

	/* (non-Javadoc)
	 * @see com.hljxxg.photoprint.dao.UserDao#deleteUser(com.hljxxg.photoprint.model.User)
	 */
	public void deleteUser(User user) {
		this.getHibernateTemplate().delete(user);
	}

	public User findById(String id) {
		return (User)this.getHibernateTemplate().get(User.class, userid);
	}

	public void saveUser(User user) {
		this.getHibernateTemplate().saveOrUpdate(user);

	}

	public User getUserByUserName(String userName){
		List<User> list = this.getHibernateTemplate().findByNamedParam("from User user where user.username=:username", "username", userName);
		if(list.size()==0){
			return null;
		}
		return list.get(0);
	}	

}

 

 

UserService

package com.javasky.photo.service;

import java.util.List;

import com.javasky.photo.model.User;

public interface UserService {
	public User findById(String id);
	public void saveUser(User user);
	public void updateUser(User user);
	public void deleteUser(User user);
	public User getUserByUsername(String username);

}

 

 

UserServiceImpl

package com.javasky.photo.service.impl;

import java.util.List;

import com.javasky.photo.dao.UserDao;
import com.javasky.photo.model.User;
import com.javasky.photo.service.UserService;

/**
 * @author batllehawk
 * Create 2008-11-28
 * Version 1.0
 */
public class UserServiceImpl implements UserService {
	private UserDao userDao;
	
	
	/**
	 * @return the userDao
	 */
	public UserDao getUserDao() {
		return userDao;
	}

	/**
	 * @param userDao the userDao to set
	 */
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}

	public void deleteUser(User user) {
		this.getUserDao().deleteUser(user);
	}

	public User findById(String userid) {
		return this.getUserDao().findById(userid);
	}

	public void saveUser(User user) {
		this.getUserDao().saveUser(user);
	}

	public void updateUser(User user) {
		this.getUserDao().saveUser(user);
	}

	public User getUserByUsername(String username) {
		return this.getUserDao().getUserByUserName(username);
	}
	

}

 

spring的配置文件如下

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
      default-autowire="byName">
<!-- 数据源配置dbcp 略 -->
<!-- sessionFactory配置 略-->
<!-- hibernate事务配置 略-->
    <!-- 事务代理父类 -->
    <bean id="baseTransactionProxy"
        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
        abstract="true">
        <property name="transactionManager">
            <ref bean="transactionManager" />
        </property>
       
        <property name="transactionAttributes">
            <props>
                <prop key="save*" >PROPAGATION_REQUIRED</prop>
                <prop key="update*" >PROPAGATION_REQUIRED</prop>
                <prop key="delete*" >PROPAGATION_REQUIRED</prop>
                <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
            </props>
        </property>
       
        <property name="optimize">
            <value>true</value>
        </property>
    </bean>
    <!-- service -->
    <bean id="userService"  parent="baseTransactionProxy" >
        <property name="target" >
            <bean class="com.javasky.photo.service.impl.UserServiceImpl"></bean>
        </property>
    </bean>
    <!-- DAO -->   
    <bean id="userDao" class="com.javasky.photo.dao.hibernate.UserDaoHibernate">
        <property name="sessionFactory">
            <ref local="sessionFactory"/>
        </property>
    </bean>

</beans>

spring事务管理支持两种方式,一种编程式事务管理,一种声明式事务管理,我觉得如果采用第一种方式,那么当我们想取消事务的时候就比较麻烦,相比而言,修改配置文件简单些,这里我使用第二中方式,userServiecBean里红色部分表示我们给它加上事务管理 ,另外,<property name="transactionAttributes">的属性中,红色部分的key命名我们要和UserService里的方法保持一致 ,开始我的UserService注册用户的方法我命名为addUser,而配置文件中我这样设置

<prop key="save*">PROPAGATION_REQUIRED</prop>

  key以save开头,导致出现以下错误

org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.
	at org.springframework.orm.hibernate3.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1095)
	at org.springframework.orm.hibernate3.HibernateTemplate$16.doInHibernate(HibernateTemplate.java:688)
	at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:372)
	at org.springframework.orm.hibernate3.HibernateTemplate.saveOrUpdate(HibernateTemplate.java:686)
	at com.javasky.photo.dao.hibernate.UserDaoHibernate.saveUser(UserDaoHibernate.java:32)
	at com.javasky.photo.service.impl.UserServiceImpl.saveUser(UserServiceImpl.java:60)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:172)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:139)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:161)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
	at $Proxy1.saveUser(Unknown Source)
	at com.javasky.photo.action.UserAction.addUser(UserAction.java:44)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274)
	at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194)
	at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106)
	at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1192)
	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:430)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	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:286)
	at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:857)
	at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:565)
	at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1509)
	at java.lang.Thread.run(Thread.java:595)

 如有不妥或更好的办法,希望不吝指出,谢谢!

下一篇我将贴出spring2.0整合hibernate3的配置

 

  • spring.jar (1.8 MB)
  • 描述: spring1.2的jar包
  • 下载次数: 13
0
0
分享到:
评论

相关推荐

    Struts1.2+Spring1.2+Hibernate3.0企业人力资源管理系统

    《Struts1.2+Spring1.2+Hibernate3.0构建的企业人力资源管理系统详解》 在JavaEE领域,Struts、Spring和Hibernate是三个极为重要的框架,它们共同构成了经典的MVC(Model-View-Controller)架构,为企业级应用开发...

    Struts1.2+Spring1.2+HIbernate3.1整合示例代码

    Struts1.2、Spring1.2和Hibernate3.1是经典的Java企业级开发框架组合,通常被称为SSH(Struts + Spring + Hibernate)集成。这个整合示例代码提供了一个全面的学习资源,帮助开发者理解如何将这三个强大的框架有效地...

    Struts 1.2+Hibernate3.3+Spring3.0整合详细步骤+源码

    3. **添加依赖**:在pom.xml或build.xml中添加Struts 1.2、Hibernate 3.3、Spring 3.0以及它们的依赖库。 4. **配置Struts**:编写struts-config.xml文件,定义Action、ActionForward和Form Bean。同时,需要在web....

    spring2.0+struts1.2+hibernate3

    在Spring中整合Hibernate,可以方便地实现数据持久化,并且Spring可以管理Hibernate的SessionFactory和Session,以确保事务的一致性。 在整合这三个框架时,通常会遵循以下步骤: 1. **环境配置**:安装并配置JDK...

    Struts1.2+Spring2.5+Hibernate3.2框架搭建(一)

    4. 整合Spring和Hibernate:在Spring中配置Hibernate的SessionFactory Bean,使用HibernateTemplate或JdbcTemplate进行数据访问。 5. 测试和运行:通过JUnit进行单元测试,确保各层功能正常,然后部署应用,测试...

    struts1.2+hibernate3.2+spring2.5+dwr

    Struts1.2、Hibernate3.2、Spring2.5 和 DWR2.0 是一组经典的Java企业级开发框架组合,它们在Web应用程序开发中扮演着重要的角色。这些框架的集成为开发人员提供了强大的功能,使得后端数据管理、业务逻辑处理以及...

    OA办公自动化管理系统(Struts1.2+Hibernate3.0+Spring2+DWR)

    例如,学习如何在Struts中定义Action和ActionForm,如何配置Hibernate的实体类和映射文件,如何利用Spring管理Bean和配置事务,以及如何在DWR中设置远程调用的方法。此外,还要掌握HTML、CSS和JavaScript等前端技术...

    spring2.0 hibernate 3.0 struts1.1 xfire1.2 整合

    这里我们关注的是一个整合了Spring 2.0、Hibernate 3.0、Struts 1.1以及XFire 1.2的项目。这些技术都是Java Web开发中的重要组件,各自在应用程序的不同层面提供服务。 Spring 2.0是Java企业级应用中的一个核心框架...

    struts1.2,spring2,hibernate3整合实例代码 改进

    Struts1.2、Spring2和Hibernate3是Java Web开发中的三大框架,它们的整合是构建企业级应用的常见方式。这个"struts1.2,spring2,hibernate3整合实例代码 改进"提供了对这三者集成的一种改进方案,主要目标是提升系统...

    ssh整合所需jar包 struts1.2+hibernate3.2+spring2.5

    5. **整合Hibernate和Spring**:利用Spring的LocalSessionFactoryBean和HibernateTemplate,让Spring管理Hibernate的SessionFactory和数据库操作。 在实际项目中,SSH整合可以实现以下优势: - **解耦合**:通过...

    Spring+Struts+Hibernate比较详细的整合配置方案

    【Spring+Struts+Hibernate整合配置方案】 Spring、Struts和Hibernate是Java Web开发中三大核心框架,它们各自负责不同的职责:Spring作为依赖注入容器和面向切面编程(AOP)框架,提供应用的结构和事务管理;Struts...

    struts1.2+hibernate+spring jar包大全

    在整合这三个框架时,Spring通常作为核心,管理Struts1.2的Action实例和Hibernate的SessionFactory。这样,Struts1.2处理HTTP请求,将控制权交给Spring,Spring再调用Hibernate执行数据库操作。Spring的AOP可以用来...

    struts1.2,spring2,hibernate3整合实例代码

    Struts1.2、Spring2和Hibernate3是Java Web开发中的三大框架,它们的整合是构建企业级应用的常见方式。这个实例代码提供了一个清晰的示例,展示了如何将这三个框架有效地结合在一起。 Struts1.2是MVC(Model-View-...

    spring整合hibernate的jar包

    标题中的“spring整合hibernate的jar包”指的是在Java Web开发中,Spring框架与Hibernate持久层框架的集成。这两个框架结合使用可以提供强大的数据访问和业务逻辑处理能力。Spring作为一个全面的轻量级框架,提供了...

    struts2+spring3+hibernate4整合所用jar包

    Struts2、Spring3和Hibernate4是Java Web开发中的三大框架,它们的整合是构建高效、灵活的企业级应用的常用方式。这篇详细的知识点解析将深入探讨这三个框架的各自功能,以及如何将它们有效地整合在一起。 **Struts...

    SSH1整合代码简单的(struts1.2+Hibernate2.5+Spring2.5)

    在本文中,我们将深入探讨SSH1整合的关键知识点,并以"SSH1整合代码简单的(struts1.2+Hibernate2.5+Spring2.5)"为背景,解析它们如何协同工作。 **Struts1.2** 是MVC设计模式的实现,主要用于处理用户界面与业务...

    struts1.2_hibernate3.2+spring2.5

    3. **Spring2.5**:Spring是一个全面的后端开发框架,包含了依赖注入、AOP(面向切面编程)、事务管理等核心功能。在2.5版本中,Spring加强了与第三方库的集成,如Hibernate,使得开发者可以方便地在Spring环境中...

    struts1.2+spring2.0+hibernate3.2 整合源码

    1、struts1.2+spring 2.0+hibernate3.2 2、struts的动作交由spring来管理,hibernate的配置集中在spring中配置。 3、增加了声明式事务处理,加强了hibernateTemplate的简单事务处理。 4、完整的Myeclipse的工程文件...

Global site tag (gtag.js) - Google Analytics