关于项目中hibernate无法删除中间表记录
2017-05-09 18:03
232 查看
这是我在做项目的时候碰到的一个头疼问题,记录下来用于以后回顾。我们在学习hibernate时候大概见得最多的老师讲解是使用的Junit单元测试来测试数据:例如下面的代码用于多对多级联操作:
这种可以remove掉Set集合中的对象因为new出来的对象与移除的对象的hashcode值一致。
注意:Set的remove是用hashcode值来判断集合中的对象与移除掉对象是否一致。在项目中我们往往使用spring的注入方式来生成对象的这就使得每个对象的地址会发生改变。因此要想remove掉多对多的中间表我们可以这样做:
假如学生中所选课程为cs。如果退课如cs我们可以通过遍历Set去比对cs的id相同时把遍历到的对象remove掉
如果有大牛有更好的方法希望不吝赐教。小弟谢过了
@Test public void many2(){ SessionFactory sessionFactory = null; Session session=null; Transaction tx=null; try { sessionFactory=com.spring.one.SessionFactory.getSF(); session=sessionFactory.openSession(); tx=session.beginTransaction(); //让某个用户有某个角色 User user=new User(); //查出这个用户 user=session.get(User.class, 1); //查出这个角色 Roles roles=new Roles(); Roles roles1=new Roles(); roles=session.get(Roles.class, 3); roles1=session.get(Roles.class, 2); //把角色付给用户 //user.getLset().add(roles); //把某个角色去除 user.getLset().remove(roles); tx.commit(); } catch (Exception e) { tx.rollback(); } finally{ session.close(); sessionFactory.close(); } }
这种可以remove掉Set集合中的对象因为new出来的对象与移除的对象的hashcode值一致。
注意:Set的remove是用hashcode值来判断集合中的对象与移除掉对象是否一致。在项目中我们往往使用spring的注入方式来生成对象的这就使得每个对象的地址会发生改变。因此要想remove掉多对多的中间表我们可以这样做:
public void uncheck(Student student,Course cs) { //因为Set中的对象是由hashcode来标识的所以不能直接去remove对象,必须先从Set中查出需要remove的对象在移除掉 Iterator<Course> it=student.getSc().iterator(); while(it.hasNext()){ if(it.next().getCid()==cs.getCid()){ it.remove(); } } hib.merge(student); }
假如学生中所选课程为cs。如果退课如cs我们可以通过遍历Set去比对cs的id相同时把遍历到的对象remove掉
如果有大牛有更好的方法希望不吝赐教。小弟谢过了
相关文章推荐
- 关于无法创建aps.web项目的解决办法
- [导入]关于无法创建aps.web项目的解决办法
- 3-(E-Teller)关于删除记录后不刷新的问题
- 在visual studio中删除最近打开的项目和文件记录的方法
- 在visual studio中删除最近打开的项目和文件记录的方法
- 关于无法创建aps.web项目的解决办法
- GridView控件的CheckBox选定删除记录,总是无法实现
- 手工删除ProjectServer2007中无法签入的项目
- 关于无法创建aps.web项目的解决办法
- 关于项目中ACTIVEx 插件无法正常运转的问题~最终解决方案
- 关于无法创建aps.web项目的解决办法
- 关于无法创建aps.web项目的解决办法
- 关于SQL Server自动备份无法删除过期的备份文件奇怪现象
- Visual Studio .net 2003 关于“试图运行项目时出错:无法在Web服器上启动调试。您不具备调试此应用程序的权限。”的新解决方案
- 关于无法创建aps.web项目的解决办法
- 关于无法创建aps.web项目的解决办法
- 关于SQL Server自动备份无法删除过期的备份文件奇怪现象
- 关于DataGrid最后一页只有一行记录时,删除此记录出错的问题
- vs2005中删除最近打开的项目和文件的记录
- 关于无法创建aps.web项目的解决办法