Set set=new HashSet();
for(Iterator i=user.getOrders().iterator();i.hasNext();){
     Orders order=(Orders)i.next();
         set.add(order);
     //user.getOrders().remove(order);
         //session.delete(order);
}
for(Iterator i=set.iterator();i.hasNext();){
Orders ord=(Orders)i.next();
user.getOrders().remove(ord); 
你删除的是一个新的set中对order的引用。。
你既然要删掉user‘s order为什么又要保存下来呢?直接删不可以吗?

解决方案 »

  1.   

    你查的 "9509" 是不是表的ID,
    因为load(BeanName.class,ID)该方法只返回一条记录;
    来面的FOR 有必要这么写吗
      

  2.   

    在同一个Iterator中不能对其集合里的元素进行删除操作所以就把集合里的元素复制到另外一个集合中了,然后用user.getOrders().remove(ord)进行删除,按道理应该是可以的啊 
      

  3.   

    现在改成这样
    Session session=HibernateSessionFactory.getSession();
        Transaction trs=session.beginTransaction();
        UserInfor user=(UserInfor)session.load(UserInfor.class, "9509");
          Set set=new HashSet(user.getOrders());
       for(Iterator i=set.iterator();i.hasNext();){
    Orders ord=(Orders)i.next();
    user.getOrders().remove(ord);
       }
        if(user.getOrders().isEmpty())
         System.out.println("is empty!");
        trs.commit();
        HibernateSessionFactory.closeSession();
    总没用引用了吧,而且打印出is empty!这证明user中的orders都被移除了啊,但还是没有把ORDERS表中相应的记录删除掉,哪位大哥知道是什么原因啊
      

  4.   

    自己忘了加上delete-orphan了,现在解决了