我数据库用的是mysql,在orderInfo(工单信息表)中有一个managerId字段关联着manager(用户表)中的主键managerId列,
在生成的hibernate中,orderInfo.java文件中生成的对应字段是Manager manager;
如果我要修改这一列的值应该怎么写呢?
请高手们帮帮忙。。!

解决方案 »

  1.   

    Manager manager=new Manager();
    付值给manager的属性...然后把这个manager  Set给managerId
    或者.查询出一个Manager 并把它Set给managerId
      

  2.   


    public String managerGetOrder(int orderId,String nowdate , Manager manager){


    String sql = "update Orderinfo set orderState = 1 ,getOrderDate = :nowdate,managerId = :managerId where orderId = :orderId";
    Query obj = getSession().createQuery(sql);

    obj.setParameter("nowdate", nowdate);
    obj.setParameter("managerId", manager);
    obj.setParameter("orderId",orderId);
    System.out.println(obj.getQueryString());
    return obj.iterate().next().toString();

    }我的方法是这么写的,但是报错org.hibernate.HibernateException: Not supported for DML operations
    at org.hibernate.hql.ast.QueryTranslatorImpl.errorIfDML(QueryTranslatorImpl.java:258)
    at org.hibernate.hql.ast.QueryTranslatorImpl.iterate(QueryTranslatorImpl.java:317)
    at org.hibernate.engine.query.HQLQueryPlan.performIterate(HQLQueryPlan.java:177)
    at org.hibernate.impl.SessionImpl.iterate(SessionImpl.java:1156)
    at org.hibernate.impl.QueryImpl.iterate(QueryImpl.java:46)
    at com.hpxx.hibernate.OrderinfoDAO.managerGetOrder(OrderinfoDAO.java:111)
    at com.hpxx.struts.action.update.ManagerGetOrderAction.execute(ManagerGetOrderAction.java:37)
    at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:110)
    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.doGet(ActionServlet.java:414)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    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 com.hpxx.filter.EncodingFilter.doFilter(EncodingFilter.java:31)
    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:233)
    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:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Unknown Source)就是不知道错在哪里
      

  3.   

    String sql = "update Orderinfo set orderState = 1 ,getOrderDate = :nowdate,managerId = :managerId where orderId = :orderId";
    改成:
    String sql = "update Orderinfo set orderState = 1 ,getOrderDate = :nowdate,manager.managerId = :managerId where orderId = :orderId";
    就可以了,你要一层一层找!
      

  4.   

    首先通过hibernate 得到一个orderInfo  那么这个对象里面就包含一个 manager 对象。修改这个manager对象就可以了。你既然都做了映射了那么这个时候manager对象就映射到你的字段了,修改了他就修改了字段。注意这里修改是 先通过一个managerId 查询到另一个 manager对象 然后再把它set给orderInfo对象。