关于项目中hibernate无法删除中间表记录
来源:互联网 发布:什么是行知教育 编辑:程序博客网 时间:2024/06/07 09:49
这是我在做项目的时候碰到的一个头疼问题,记录下来用于以后回顾。我们在学习hibernate时候大概见得最多的老师讲解是使用的Junit单元测试来测试数据:例如下面的代码用于多对多级联操作:
@Testpublic 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掉
如果有大牛有更好的方法希望不吝赐教。小弟谢过了
0 0
- 关于项目中hibernate无法删除中间表记录
- 【MySQL】关于大表记录的删除
- Hibernate 删除副表记录但不删除主表记录解决方法
- Hibernate 删除主表记录并删除副表记录解决方法
- 循环删除表记录
- oracle中删除主从多表记录时,用级联删除
- SQLServer数据库删除表记录sql
- 00020.Oracle高效删除表记录
- mysql下删除重复表记录
- ORACLE恢复删除表或表记录
- ORACLE恢复删除表或表记录
- ORACLE恢复删除表或表记录
- 误删除表记录,闪回恢复
- ORACLE恢复删除表或表记录
- ORACLE恢复删除表或表记录
- ORACLE恢复删除表或表记录
- sql删除数据表及表记录
- ORACLE恢复删除表或表记录
- 进行app性能和安全性测试的重要性
- 矩阵翻转
- 算法提高 简单加法
- java访问权限
- Oracle Rac for RedHat6.6安装前准备二
- 关于项目中hibernate无法删除中间表记录
- 服务器部署、配置nginx
- iOS 关于修饰代理用weak还是assign, strong
- 时序数据库(I)-存储
- JAVA中的可变参数
- kmp
- 汽车控制器软件EMC技术(一)
- 国内最高端的CMS与WEB开发—逐浪CMS让你赢!
- 查询安装数据库的编码格式