由于你做的是双向映射Customer对应orders,Order对应customer,当使用双向映射时必须使用一下语法。
Customer customer=查询对象;
Order order=new Order();
调用order的set方法赋值
order.setCustomer(customer);---------1
customer.getOrders().add(order);--------2
必须1,2两个同时使用才能实现级联目的。我估计你是只调用了2,而没有调用1

解决方案 »

  1.   

    建议设置为
    <set name="orders" cascade="save-update" inverse="true"> 
      <key column="CUSTOMER_ID" /> 
      <one-to-many class="com.mycurr.persistence.Order"/> 
    </set>
    避免不必要的语句执行
      

  2.   

    ORDER.sercustomer(customer)这句我已经写了但是根据你的想法。。加上了inverse="true"之后。。的确避免了那个问题但只是逃避了那个问题你能出现这个问题的本质原因吗??谢谢分先给您了。。
      

  3.   

    你能把代码贴出来吗,按说
    Customer customer=new Customer();
    ........set methods
    Order order1=new Order();
    ........set methods
    Order order2=new Order();
    ........set methods
    order.setCustomer(customer);
    customer.getOrders().add(order1);
    customer.getOrders().add(order2);
    dao.save(customer);
    这样不会错呀
      

  4.   

    我用的是DAO.SAVEORUPDATE(CUSTOMER);
    以下是代码,我觉得没什么问题啊,谢谢你哈:
    public class AddtocarAction extends Action {
    CustomerService cs ; public ActionForward execute(
    ActionMapping mapping,
    ActionForm form,
    HttpServletRequest request,
    HttpServletResponse response) {

    HttpSession session= request.getSession();

        Set orders = new HashSet();
    Customer customer = new Customer();
    ShoppingCar sc = new ShoppingCar();
    OrderItem orderitem = new OrderItem();
    Order order =null;
    if(session.getAttribute("order")==null)
    {
    System.out.println("新建的ORDER");
    gettime ordernum = new gettime();
    order = new Order();
    order.setOrderNumber(ordernum.getnowtime());
    order.setDate(ordernum.getyearmonth());
    System.out.println("新建的ORDER名称:"+order.getOrderNumber());
    }
    else
    {
    System.out.println("已有的ORDER");
    order =(Order)session.getAttribute("order");
    System.out.println("已有的ORDER名称:"+order.getOrderNumber());
    }


    String id =  request.getParameter("id");
    Integer iid= new Integer(id);

    customertishi csts = (customertishi)session.getAttribute("csts");
    Book innerbook = (Book)cs.uniqueResult("from Book where id ='"+ iid.intValue() +"'");
    customer =(Customer)cs.uniqueResult("from Customer where login ='"+csts.getCustomername()+"'"); order.setCustomer(customer);
    orderitem.setBook(innerbook);
    orderitem.setBookprice(innerbook.getPrice());
    orderitem.setBooknum(1);
    orderitem.setOrder(order);
    sc.addorderitem(orderitem);
    order.setOrderitems(sc.getItems());

    orders.add(order);
    customer.setOrders(orders);
    System.out.println("customer的iiiiidddddd是:"+ order.getCustomer().getId());
    cs.saveOrUpdateCustomer(customer); session.setAttribute("order",order);
    return mapping.findForward("addtocar");
    }
    public void setCs(CustomerService cs) {
    this.cs = cs;
    }
    }