回复人:gongyali2005(JAVA 民工) ( 四级(中级)) 信誉:100  2007-08-26 15:14:57  得分:0inverse="true"在ADDR里设置.是在address.hbm.xml里吗?  在哪个元素里设置呢???

解决方案 »

  1.   

    inverse="true"在ADDR里设置了,但是还是删不调,系统没报错。不知道哪有问题
      

  2.   

    Students s=(Students)session.load(Students.class,"1");
    s确定不为null;
      

  3.   

    s里有值的,还取出来了。但就是删不调students和相关的值(address).Hibernate: delete from student_course_link where StudentId=?
    Hibernate: delete from address where AddressId=?
    Hibernate: delete from students where StudentId=?
    上边是hibernate打印的sql
      

  4.   

    提交了的,但抛出下面错误:Hibernate: update address set StudentId=null where StudentId=?
    net.sf.hibernate.util.JDBCExceptionReporter logExceptions
    警告: SQL Error: 1048, SQLState: 23000
    net.sf.hibernate.util.JDBCExceptionReporter logExceptions
    严重: Column 'StudentId' cannot be null
    Caused by: java.sql.BatchUpdateException: Column 'StudentId' cannot be null为什么hibernate要update,我是希望delete的
      

  5.   

    提交了的,但抛出下面错误:Hibernate: update address set StudentId=null where StudentId=?
    net.sf.hibernate.util.JDBCExceptionReporter logExceptions
    警告: SQL Error: 1048, SQLState: 23000
    net.sf.hibernate.util.JDBCExceptionReporter logExceptions
    严重: Column 'StudentId' cannot be null
    Caused by: java.sql.BatchUpdateException: Column 'StudentId' cannot be null为什么hibernate要update,我是希望delete的
    解决方法: 1  把address 中的student-Id 设为可以null,那么执行update 之后自然会delete
               2  在address 方的inverse=“true” 放到student那里去
    两者二选一具体问题感觉出在这里   Students s=(Students)session.load(Students.class,"1");
    student 没有和 address 建立联系,那么自然是不能级联的
      

  6.   

    好像漏了一句  session.beginTransaction();
      

  7.   

    session.beginTransaction(); 是加了的,就是没帖上去。事务应该是没问题的现在可以通过级联删除students表的记录并同时删掉与之对应的address表:有些hibernate的日志不太明白:
    Hibernate: delete from address where AddressId=?
    Hibernate: delete from address where AddressId=?
    Hibernate: delete from students where StudentId=?
    为什么删除address,要通过addressId,怎么不是: delete from address where studentId=?,
    这样不是可以只用一条语句就把所有相关的address都删掉,不用删一条记录,而执行一次delete, 降低性能。cascade是放到<set>,还是放到
    回复人:d2lorder() ( 一级(初级)) 信誉:100
    解决方法: 1 把address 中的student-Id 设为可以null,那么执行update 之后自然会delete
    2 在address 方的inverse=“true” 放到student那里去
    两者二选一为什么要设address表 中的student-Id为空呢????  执行update 之后自然会delete???不是很懂这句话的意思。
    inverse=“true”:到底放到哪一端呀??????????cascade是放到students.hbm.xml里的<set>,还是 address.hbm.xml的<many to one>????
    为什么不把cascade放在address.hbm.xml的<many to one>里呢?????
      

  8.   

    inverse = ture 出现在哪张表 就说明两表关系由另一张表维护。
    那么当你的inverse 在address的时候,delete student 会先将address 的FK 至为null 然后删除address 最后删除student ,这就是为什么要么 inverse 放在student那里,要么FK可以为NULL至于cascade放在哪里,一般是出现在关系维护方那一块