发信人: lzd82 (gogo), 信区: Java
标  题: 问个hibernate级联删除的问题
发信站: 水木社区 (Wed Dec  2 13:56:18 2009), 站内简单的一对多双向关联,customer和order配置文件相关信息如下:
customer.hbm.xml中
<set name="orders" cascade="delete" inverse="true">
        <key column="CUSTOMER_ID" />
        <one-to-many class="Order" />
</set>order.hbm.xml中
 <many-to-one
        name="customer"
        column="CUSTOMER_ID"
        class="Customer"
        not-null="true"
        cascade="delete" 
 /> 应用代码:
 加载一个customer,然后删除
 Customer customer = (Customer) session.load(Customer.class, new Long(1));
 session.delete(customer); 执行的sql语句是:
 Hibernate: delete from orders where id=?
 Hibernate: delete from orders where id=?
 ......
 Hibernate: delete from customers where id=? 并不是期望中的
 delete from orders where customer_id=?
 delete from customers where id=? 请问是哪的配置问题吗?具体该如何配置呢?

解决方案 »

  1.   

    估计和你配置没有问题,是 Hibernate实现的问题。
      

  2.   

    这应该是一对多hibernate的级联删除,先查找出来
    customer_id=? 的orders,再用orders的id删除 
      

  3.   

    配置文件里改为:inverse="false"
      

  4.   

    并不是期望中的 
    delete from orders where customer_id=? 
    delete from customers where id=? 
    改用hql实现session.createQuery("delete from orders where customer = 1").exeupdate();
    session.createQuery("delete from customers  where customerId = 1").exeupdate();
      

  5.   


    session.createQuery("delete from orders where customer = 1").exeupdate();
    是不是要改成:
    session.createQuery("delete from orders where customer.id=1").exeupdate();
      

  6.   

    cascade="delete" 
    最好别用级联删除,他会删除你的关联对象。。
    自己手动来吧