个人技术总结
Posted fzhhj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了个人技术总结相关的知识,希望对你有一定的参考价值。
-
hibernate实现数据库的删除,难点是外键的约束和删除方法的具体使用。
-
有School、 College、 Major 、UserIdentity四个类,School和College,College和Major都是一对多的关联,同时School、College、Major都和UserIdentity是一对多关联。如果我们直接删除School的一条记录会出现异常,提示外键约束,删除失败。
使用hibernate的配置有两种解决方法
@OneToMany(mappedBy = "schoolBySchoolId",orphanRemoval=true) public Collection<College> getCollegesById() { return collegesById; } @OneToMany(mappedBy = "schoolBySchoolId",cascade = CascadeType.REMOVE) public Collection<Useridentity> getUseridentitiesById() { return useridentitiesById; }
-
orphanRemoval = true; 这个注解是自动删除外键为null的记录,当School的一条记录删除时,College表中的一些记录的School外键变为null,会被hibernate自动删除。
-
cascade = CascadeType.REMOVE; 这个cascade属性是关联关系的级联属性,配置它的值为CascadeType.REMOVE即配置了级联删除,除此之外还有PERSIST(级联保存操作),MERGE(合并(merge=save+update)),REFRESH(级联刷新操作),DETACH(级联分离操作),ALL(所有级联操作)
值得一提的是这两个属性都在一的那端进行配置
我们配置了级联删除,只需要删除School就可以将对应的College和major删除。
public boolean delete(Integer schoolId) { Session session = sessionFactory.getCurrentSession(); School school = (School) session.load(School.class, schoolId); session.delete(school); return true; }
其中的关键在于要先得到指定Id的对象,再进行删除,
School school = (School) session.load(School.class, schoolId);就是为了得到School对象,
对象的获取也可以通过hql语句或者sql语句查询数据库。
-
-
参考资料
以上是关于个人技术总结的主要内容,如果未能解决你的问题,请参考以下文章
《java精品毕设》基于javaweb宠物领养平台管理系统(源码+毕设论文+sql):主要实现:个人中心,信息修改,填写领养信息,交流论坛,新闻,寄养信息,公告,宠物领养信息,我的寄养信息等(代码片段