ssh整合的时候,我在保存或者修改时总出现这句话,请高手指点
在spring配置文件里面:
<bean id="transactionAdvisor"
class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
<constructor-arg>
<ref local="transactionInterceptor" />
</constructor-arg>
</bean>
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributeSource">
<ref local="transactionAttributeSource" />
</property>
</bean>
<bean id="transactionAttributeSource"
class="org.springframework.transaction.interceptor.MethodMapTransactionAttributeSource">
<property name="methodMap">
<map>
<entry
key="net.hlj.service.BaseService.do*">
<value>PROPAGATION_REQUIRED</value>
</entry>
<entry
key="net.hlj.service.BaseService.*">
<value>PROPAGATION_REQUIRED</value>
</entry>
<entry key="net.hlj.action.OrgService.*">
<value>PROPAGATION_REQUIRED</value>
</entry>
<entry key="net.hlj.action.OrgAction.*">
<value>PROPAGATION_REQUIRED</value>
</entry>
<entry
key="net.hlj.action.UserService.*">
<value>PROPAGATION_REQUIRED</value>
</entry>
<entry
key="net.hlj.action.LoginAction.*">
<value>PROPAGATION_REQUIRED</value>
</entry>
<entry
key="net.hlj.action.UserAction.*">
<value>PROPAGATION_REQUIRED</value>
</entry>
</map>
</property>
</bean>
        <bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
在web.xml里面:
         <filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
<init-param>
<param-name>singleSession</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
这是DAO里面的相关函数:
         public void save(Object domain) {
getHibernateTemplate().save(domain);
} public void saveOrUpdate(Object domain) {
getHibernateTemplate().saveOrUpdate(domain);
} public void update(Object domain) {
getHibernateTemplate().update(domain);
}

解决方案 »

  1.   

    不能进行跨session的lazy loading,把操作放在一个session里面就能解决。 其实问题在于你的两个操作是否是在一个事务里,通过查看spring的事务那部分代码可以得知,如果方法在事务中,那么方法中所有的session都是同一个,这个session和对应的transaction会组装成一个sessionHolder类然后放到当前线程中,如果不在一个事务中,那么每次调用dao都会得到一个新的session,这样两次得到同一个object会使这个object和两个session关联,具体的原因就是这样的
      

  2.   

    LZ看看这个文章,也许有帮助http://www.javaeye.com/post/239485
      

  3.   

    seooon.close(); 打开后不用了记得关闭