例如用户和用户组 , 一个user属于多个group ,一个group可以有多个user
现在数据库中有一个user(id=3)和一个group(id=1)
这时同时想把use(id=3)r分配到group(id=2)下
Set<Group> groups = new HashSet<>();
Gropu group = groupService.get(3);
groups.add(group);
user.setGroups(groups) ;
userService.update(user);
这时更新是 hibernate先执行了删除再插入
最后数据表成了3,1
这显示是不满足需求的啊!
有人遇到相似问题吗?
高手在哪里?求指导释啊
现在数据库中有一个user(id=3)和一个group(id=1)
这时同时想把use(id=3)r分配到group(id=2)下
Set<Group> groups = new HashSet<>();
Gropu group = groupService.get(3);
groups.add(group);
user.setGroups(groups) ;
userService.update(user);
这时更新是 hibernate先执行了删除再插入
最后数据表成了3,1
这显示是不满足需求的啊!
有人遇到相似问题吗?
高手在哪里?求指导释啊
解决方案
40
第一个问题回答:假如你设置了级联关系,user对象已经包含了group的set,新添加add,只需要user.getGroups.add(新的);
假如你不查出来,程序怎么样知道,你不是想要删除旧的记录,而是想要新添加呢?
第二个问题:性能方面,假如关联表设置的当,原有记录存在,只会添加新的,不会删除旧的;不存在你说的性能问题!
第三点:优化方面 本人是有一些方法,但是 很久没留意了 怕印象有误。 所以本人想说的是,Hibernate本身就是面向对象的ORM,如想精准控制,就用JDBC吧,Hibernate不是不能,可以通过配置文件配置,但有些复杂,得不偿失;没有必要为这点性能顾虑太多,若是真要求高性能,Hibernate肯定不会用的