古詩詞大全網 - 藝術簽名 - spring整合hibernate的事務壹直錯誤

spring整合hibernate的事務壹直錯誤

SaUserDAO userdao=(SaUserDAO)context.getBean("userDAOProxy");

context.getBean("userDAOProxy"); 是說從spring環境context中拿出id=userDAOProxy對象.再把這個對象強制轉換成SaUserDAO.

妳改成

SaUserDAO userdao=(SaUserDAO)context.getBean("SaUserDAO");

妳把userDAOProxy對象強轉成SaUserDAO,這樣行不?

關鍵是要明白spring做了什麽

妳的配置文件sessionFactory有沒有進行配置

SPRING就是壹個IOC容器,簡單來講我們平常壹般是NEW壹個對象.

有了SPRING後,將對象配置在SPRING後,我們就可以從SPRING的容器裏面拿出那些對象了直接用.也就是所謂的註入.

比如說:妳在A類中,要調用B類的方法時,通常是new壹個B的實例.

用SPRING的話,只用在A中加壹個屬性 B b;然後在配置文件中將A的屬性b進行配置就可以了.

<bean id="b" class="B">

<bean id="a" class="wgh.db.A">

<property name="b">

<ref bean="b" />這裏的b就是上面的id=b的那個值

</property>

</bean>

關於SPRING的代理

AOP代理

Spring缺省使用J2SE 動態代理(dynamic proxies)來作為AOP的代理。 這樣任何接口(或者接口集)都可以被代理。

Spring也可以使用CGLIB代理. 對於需要代理類而不是代理接口的時候CGLIB代理是很有必要的。如果壹個業務對象並沒有實現壹個接口,默認就會使用CGLIB。

簡單來講,妳的類沒有實現接口就得強制使用CGLIB來代理.類實現了接口默認采用JDK的動態代理機制實現AOP.

強制使用CGLIB生成代理.

1在spring配置文件中加入

<aop:aspectj-autoproxy proxy-target-class="true"/>

2 加入CGLIB庫

spring/lib/cglib/*.jar

spring對事務的管理也就是AOP了

推薦妳壹個不錯的視頻

/topics/93279/

我復制壹個我學習時用到的配置文件

Spring與hibernate的集成

要控制事務,就得要拿到hibernate的session. hibernate的session獲得方式:sessionfactory.sessionfactory的創建configuration,configuration的獲得就由配置文件了.Spring整合Hibernate主要是對hibernate的Session進行管理,包含Session的創建、提交、關閉的整個生命周期。此處的session可以看作是壹個connection.

聲明式事務的配置

1配置sessionfactory

2配置事務管理器

3配置事務的傳播特性

4配置哪些哪些方法使用事務

<!--配置sessionfactory -->

配置sessionFactory,讓spring來創建Session。

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

<property name=" configLocation ">

<value>classpath:hibernate.cfg.xml</value>hibernate的配置文件

</property>

</bean>

class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"//只適合xml方式

class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean//兼容註解

<!-- 配置事務管理器 -->

把sessionFactory拿過來放到事務管理器裏. 創建了壹個id為transactionManager的事務管理器,它匹配壹個session工廠,<ref bean="sessionFactory"/>這個sessionFactory是指session工廠的ID。

<bean

id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

<property name="beanFactory" ref=” sessionFactory”/>

</bean>

<!-- 配置事務的傳播特性 -->

這裏創建了壹個advice(通知),對事務管理器進行事務設置,這裏意思是指,對於以save、del、update開頭的方法應用事務。

<tx:advice id="txAdvice" transaction-manager="transactionManager">

<tx:attributes>

<tx:method name="add*" propagation="REQUIRED"/>

<tx:method name="del*" propagation="REQUIRED"/>

<tx:method name="modify*" propagation="REQUIRED"/>

<tx:method name="*" read-only="true"/>

</tx:attributes>

</tx:advice>

<!-- 配置哪些哪些方法使用事務 -->

配置的作用是把我們上面創建的advice應用到具體的類中。以下代碼的意思指,給包com.spring下的所有類的所有方法應用allManagerMethod()方法.

<aop:config>

<aop:pointcut id="allManagerMethod" expression="execution(* com.spring.*.*(..))"/>com.spring包下所有的類所有的方法

<aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod"/>advisor可以理解為壹個aspect,壹個aspect壹般有pointcut,advice.

</aop:config>

妳學習這個最好弄懂SPRING的原理

IOC,AOP這些概念原理什麽的