码迷,mamicode.com
首页 > 其他好文 > 详细

个人技术总结

时间:2020-06-15 15:45:05      阅读:53      评论:0      收藏:0      [点我收藏+]

标签:sdn   ade   session   map   分离   detach   tac   move   ssi   

  1. hibernate实现数据库的删除,难点是外键的约束和删除方法的具体使用。

  2. 有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;
        }
    
    1. orphanRemoval = true; 这个注解是自动删除外键为null的记录,当School的一条记录删除时,College表中的一些记录的School外键变为null,会被hibernate自动删除。

    2. 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语句查询数据库。

  3. 参考资料

    Hibernate4 注解配置实现一对多级联删除

个人技术总结

标签:sdn   ade   session   map   分离   detach   tac   move   ssi   

原文地址:https://www.cnblogs.com/fzhhj/p/13131118.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!