级联操作与hibernate 数据状态

什么是主关键字?级联更新、级联删除有什么作用?

 

主关键字就是主键,例如员工表中的员工ID是主键,主键是唯一的,就像身份证和学生证一样。
一个表可以有一个或者多个主键,例如选课表必须有2个主键组成,一个是课程ID,另一个是学生ID,只有同时具备,才能确定这一条数据的唯一性。

级联更新就是好比学生表中的的张三选了一门叫做高数的课程,在选课表中就有张三和高数共同组成的一条选课记录,如果级联更新,当学生表中的张三改名为张四,他的选课表中的张三也会自动改为张四

级联删除,例如员工表中一项数据是部门ID,部门ID是部门表的主键,如果是级联删除,当删除了部门A的时候,会把所有属于部门A的员工都给删除。 

Hibernate的三种数据状态

 

在Hibernate中,对象有三种状态:临时状态、持久状态和游离状态。
临时状态 :当new一个实体对象后,这个对象处于临时状态,即这个对象只是 一个保存临时数据的内存区域,如果没有变量引用这个对象,则会被jre垃圾回收机制回收。这个对象所保存的数据与数据库没有任何关系,除非通过 Session的save或者SaveOrUpdate把临时对象与数据库关联,并把数据插入或者更新到数据库,这个对象才转换为持久对象。
例如:Emp e=new Emp();    //创建临时对象
          e.setEmpno((long) 8888);
          e.setEName("mike");
          ...
          EmpDAO d=new EmpDAO();
          d.save(e);      //持久化
          ...

持久状态 :持久化对象的实例在数据库中有对应的记录,并拥有一个持久化表示(ID)。对持久化对象进行delete操作后,数据库中对应的记录将被删除,那么持久化对象与数据库记录不再存在对应关系,持久化对象变成临时状态。
    持久化对象被修改变更后,不会马上同步到数据库,知道数据库事务提交。在同步之前,持久化对象是脏的(Dirty)。
例如:
          Emp e=new Emp(); //创建了临时的对象
          EmpDAO edao= new empDAO();
          e=edao.findbyEmpno((long) 7786);    //使对象与数据库记录对应,从而持久化
          e.setEname("新的名字");                     //修改了持久化对象,使之处于 Dirty
          ......
          edao.saveorupdate(e);                      //保存,但是仍然 Dirty
          tran.commit();                                     //提交,实现与数据库同步,不再Dirty
          ......

游离状态 :当Session进行了Close、Clear或者evict 后,持久化对象虽然拥有持久化标识符和与数据库对应记录一致的值,但是因为会话已经消失,对象不在持久化管理之内,所以处于游离状态(也叫:脱管状态)。 游离状态的对象与临时状态对象是十分相似的,只是它还含有持久化标识。


其中,持久化状态的对象,简称为:PO
而临时状态和游离状态的对象,简称为: VO


下图是Hibernate下对象状态的变化关系示意图:

 

你可能感兴趣的:(Hibernate)