public void update(lab question) {
getHibernateTemplate().update(question); }
我用一个java类测试:
lab l=labManager.get1(416);
l.setInfo("用于化学实验");
l.setLabname("物理");
l.setType(labtype);
l.setNumber(416);
l.setState(false);
labManager.update(l);
就是对的。
但是我把项目在TOMCAT中运行区出现错误:
严重: Servlet.service() for servlet action threw exception
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' er from transaction definition.
at org.springframework.orm.hibernate3.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1085)
at org.springframework.orm.hibernate3.HibernateTemplate$14.doInHibernate(HibernateTemplate.java:646)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:362)
at org.springframework.orm.hibernate3.HibernateTemplate.update(HibernateTemplate.java:644)
at org.springframework.orm.hibernate3.HibernateTemplate.update(HibernateTemplate.java:640)
at com.login.pratice.dao.labDaoHibernate.update(labDaoHibernate.java:165)
at com.login.pratice.action.LabAction.updateone(LabAction.java:170)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:78)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
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:228)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Unknown Source)在Action中调用的代码:
public ActionForward updateone(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {

String labname=(String)request.getParameter("labname");
int number=Integer.valueOf(request.getParameter("number"));
boolean state=Boolean.valueOf(request.getParameter("state"));
String info=(String)request.getParameter("info");
String typename=(String)request.getParameter("typename");
LabType labtype=labtypeManager.get(typename);

lab la=(lab)labManager.get1(number);
la.setInfo(info);
la.setLabname(labname);
la.setNumber(number);
la.setState(state);
la.setType(labtype);
labManager.update(la);

return mapping.findForward("delete");
}
其中执行到:labManager.update(la);时就不能执行。
哪位高手指点一下,谢谢.

解决方案 »

  1.   

    严重: Servlet.service() for servlet action threw exception
    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' er from事务问题,看看spring配置的事务update时是否支持事务
      

  2.   

    我是这样配置的,需要什么改动么?
    <bean id="employeeServiceProxy"
    class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager">
    <ref bean="transactionManager" />
    </property>
    <property name="target">
    <ref local="labDao" />
    </property>
    <property name="transactionAttributes">
    <props>
        <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
        <prop key="*">PROPAGATION_REQUIRED</prop>
    </props>
    </property>
    </bean> 
      

  3.   

     <prop key="find*">PROPAGATION_REQUIRED,readOnly </prop> 
    修改成notsupport.你自己查下然后修改吧
      

  4.   

    看看你的web.xml中有么有将singleSession参数设置成true?默认是false的。
    如果这个singleSession非要设置成true的话,那么就修改你的update(lab question)方法吧。
    注意,保存也会有问题,建议修改成saveOrUpdate,如下:
    public void saveOrUpdate(lab question) { 
        Transaction tx =getSession().beginTransaction();
        getSession().setFlushMode(FlushMode.AUTO);
        getSession().saveOrUpdate(entity);
        tx.commit();
        getSession().setFlushMode(FlushMode.NEVER);
    }