Hibernate的和问题:操作人:\x05\x05书:我要新添加书:Book book = new Book();book.setName("aaa");Operator operator2 = new Operator();\x05operator2.setId(1);\x05//注意:此id数据库中已存在book.setOperator2(operator2);operato

来源:学生作业学帮网 编辑:学帮网 时间:2024/05/06 02:24:36

Hibernate的和问题:
操作人:
\x05
\x05
书:
我要新添加书:
Book book = new Book();
book.setName("aaa");
Operator operator2 = new Operator();
\x05operator2.setId(1);\x05//注意:此id数据库中已存在
book.setOperator2(operator2);
operator2.getBookTs().add(book);
bookDAO.save(book);
问题就在这里,..
在many-to-one中,如果设置了cascade="persist",则就会存进书,并设置好了和人的关联,并不会去更新operator表;
如果没有设置cascade="persist"或者cascade="all",则在存进书的同时,也会更新operator表,发出sql语句:Hibernate:update operator_t set name=?,password=?,system=?,reader=?,book=?,borrow=?,query=?where id=?,这时候,operator表中对应的id为1的字段被更新,其它列表全为null值了.
这到底是怎么回事?

hibernate在执行sava或者update的时候不会触发cascade="persist" .所以第一种情况并不会级联修改operator的数据.cascade="all" 会触发级联的,会去更新operator的内容.而你这个operator除了id之外的属性都为null,更新到数据库就都是null了.