作业帮 > 综合 > 作业

Hibernate的和问题:

来源:学生作业帮 编辑:灵鹊做题网作业帮 分类:综合作业 时间:2024/04/28 20:37:42
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的和问题:
hibernate在执行sava或者update的时候不会触发cascade="persist" .所以第一种情况并不会级联修改operator的数据.cascade="all" 会触发级联的,会去更新operator的内容.而你这个operator除了id之外的属性都为null,更新到数据库就都是null了.
再问: 哦,明白这关系了,可是,还有一点,就是对于有id的对象,hibernate不是只更新改过的字段,不会去更新字段为null的属性(依旧默认为数据库中存在的值)和没改的字段,这怎么就更新了呢?
再答: Operator operator2 = new Operator(); 你这个new出来的 除了id 其他的属性都没赋值,所以就都更新了。