JPA是Java Persistence API的简称,中文名Java持久层API。
因JPA是由Hibernate的创建者编写,因此和Hibernate基本相似一致。JPA由不同的服务解析,因此在weblogic,jboss会有不同,因此在做注解时尽量用JPA。
Hibernate对象的三种状态:
transient :转瞬即逝的
persist : 持久的
detached: 超脱的,脱离的,游离态
这三种状态相当于对象存储的过程: 准备->执行->结束返回
transient: 在session中new 一个DO对象,向DO中插入数据,在进行save,update,delete前此对象属于临时状态,数据库没有对应的数据对应。
persist: 执行save(),persist(),saveOrUpdate()等操作后,在session未关闭前,此对象就属于持久化状态,在此时对数据的更改,
在session结束前都会被自动同步到库中。也可通过flush()让立即同步。
注意:merge()是将当前对象复制一份,让复制的那份去执行保存更新操作,自身仍处于脱离状态,因此merge做save动作时对象不会有主键ID。
delete()执行后对象数据还在,但是数据库数据已经不存在,因此此时的数据处于脱离状态,session关闭时并不会触发数据库同步。
detached: DO对象不受session管控,对DO对象数据的更改不会与数据库同步。session关闭后,数据处于游离的。或者clear()强制让数据处于游离。
merge,delete也会使对象处于游离。