因為lazy的問題,還是采用了OpenSessionInView
一開始我的web.xml配置文件如下:
????<filter>?
????????<filter-name>opensession</filter-name>?
????????<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>?
????</filter>?
寫了個保存的代碼測試了一下,報如下的錯誤:
org.springframework.dao.InvalidDataAccessApiUsageException:?Write?operations?
are?not?allowed?in?read-only?mode?(FlushMode.NEVER)?-?turn?your?Session?
into?FlushMode.AUTO?or?remove?'readOnly'?marker?from?transaction?definition?
????????at?org.springframework.orm.hibernate3.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1076)?
????????at?org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:616)?
????????at?org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:366)?
????????at?org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:614)?
????????at?com.phopesoft.security.service.impl.UserServiceImpl.addUser(UserServiceImpl.java:40)?
????????at?com.phopesoft.security.web.UserAction.add(UserAction.java:52)?
????????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?com.opensymphony.xwork.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:365)?




.?
在javaeye中搜索了一下,發(fā)現(xiàn)了Readonly的帖子,將web.xml修改為如下:
<filter>?
????????<filter-name>opensession</filter-name>?
????????<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>?
????????<init-param>?
????????????<param-name>singleSession</param-name>?
????????????<param-value>false</param-value>?
????????</init-param>?
????</filter>?
保存的代碼順利通過測試,但是刪除的代碼卻不能通過了.出現(xiàn)如下的錯誤:
org.hibernate.HibernateException:?Illegal?attempt?to?associate?a?collection?
with?two?open?sessions?
????????at?org.hibernate.collection.AbstractPersistentCollection.setCurrentSession(AbstractPersistentCollection.java:410)?
????????at?org.hibernate.event.def.OnUpdateVisitor.processCollection(OnUpdateVisitor.java:40)?
????????at?org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:101)?
????????at?org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:61)?
????????at?org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:55)?
????????at?org.hibernate.event.def.AbstractVisitor.process(AbstractVisitor.java:123)?
????????at?org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:72)?
????????at?org.hibernate.impl.SessionImpl.fireDelete(SessionImpl.java:790)?
????????at?org.hibernate.impl.SessionImpl.delete(SessionImpl.java:768)?
????????at?org.springframework.orm.hibernate3.HibernateTemplate$25.doInHibernate(HibernateTemplate.java:772)?
????????at?org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:366)?
????????at?org.springframework.orm.hibernate3.HibernateTemplate.delete(HibernateTemplate.java:766)?
????????at?org.springframework.orm.hibernate3.HibernateTemplate.delete(HibernateTemplate.java:762)?
同樣在論壇里面搜索到遇到這個問題的朋友,回帖說去掉singleSession!
迷惑了