Role r = new Role(); r.setName("TEST"); r.setDescription("123"); r.setLevel(2); roleServices.merge(r); System.out.println(r.getId());
上面代码执行完以后,r.getId()是null,
因为merge执行完成以后,merge的对象不会被持久化,如果把merge修改为save,则不会空。
Role r = new Role(); r.setName("TEST"); r.setDescription("123"); r.setLevel(2); r.setId(1L); roleServices.merge(r); System.out.println(r.getId());
如果数据库中已经存在ID为1的role,则执行update,否则insert。
但是这样说是不对的?
因为merge在执行以前首先按照id来select,如果数据库中不存在,则执行insert;
但是如果数据库中查询出记录了,则分为两种情况:
1. 如果merge对象的属性和数据库中不一致了,则update
2. 如果merge对象没有做任何修改,则不执行任何操作。