您现在的位置是:首页 >

mybatis多表查询用对象接收 JPA和hibernate对删除操作的不同[1]

火烧 2023-03-31 03:56:45 1053
JPA和hi er ate对删除操作的不同[1]   在hi er ate里面调用 e io 的delete方法以后 无论这个被删除的对象有没有被人外键引用到 都可以被删除 并且此时的外键设为 ull

JPA和hibernate对删除操作的不同[1]  

  在hibernate里面调用session的delete方法以后 无论这个被删除的对象有没有被人外键引用到 都可以被删除 并且此时的外键设为null 也就是说他会自动帮我们去查看他被谁引用到了 然后把引用全部去掉后 再把自己删掉 而在JPA里面 如果调用EntityManager remove方法时 传进去的对象 有被外键引用到 则会失败 因为JPA里面的实现就是直接执行delete语句 也不管他有没有被外键引用 此时 当然会出错了

  测试时候使用的两个类分别如下

  举的例子是部门和员工的关系 一个部门可以有多个员工 然后把部门删掉的时候 员工的部门属性就为null了 不过 按照严谨来说 还是JPA的严谨一些 这样可以防止误操作 呵呵

  部门的实体对象

mybatis多表查询用对象接收 JPA和hibernate对删除操作的不同[1]

/* * To change this template choose Tools | Templates * and open the template in the editor  */package hadeslee jpaentity;

import java io Serializable;import java util HashSet;import java util Set;import javax persistence Entity;import javax persistence GeneratedValue;import javax persistence GenerationType;import javax persistence Id;import javax persistence OneToMany;import javax persistence Table;

/** * * @author hadeslee */@Entity@Table(name = JPADepartment )public class Department implements Serializable {

    private static final long serialVersionUID = L;    @Id    @GeneratedValue(strategy = GenerationType AUTO)    private Long id;    @OneToMany(mappedBy = department )    private Set<Person> persons = new HashSet<Person>();    private String deptName;    private String description;

    public String getDeptName() {        return deptName;    }

    public void setDeptName(String deptName) {        this deptName = deptName;    }

    public String getDescription() {        return description;    }

lishixinzhi/Article/program/Java/ky/201311/29049  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码