JPA学习笔记(2)之相关接口/类

本文详细介绍了JPA中的Persistence、EntityManagerFactory、EntityManager接口及其相关方法,包括find、getReference、persist、remove和merge。此外,还讨论了EntityManager与Hibernate Session的区别以及EntityTransaction的事务管理方法begin、commit和rollback。
摘要由CSDN通过智能技术生成

JPA相关接口/类

Persistence

1.        作用:通过createEntityManagerFactory的静态方法,获取EntityManagerFactory(实体管理器工厂)实例。

1)        带有一个参数:以JPA配置文件presistence.xml中持久化单元名为参数。使用presistence.xml文件中设置的属性。

2)        带有两个参数:第一个参数同上,第二个参数是一个Map类型用于设置JPA的相关属性,这时将忽略其他地方设置的属性。


EntityManagerFactory

1.        作用:用来创建EntityManager实例。EntityManagerFactory使用如下方法获得EntityManager实例。

1)        createEntityManager():用于创建实体管理器对象实例(常用)。

2)        createEntityManager(Map map):用于创建实体管理器对象实例的重载方法,Map 参数用于提供 EntityManager的属性。

3)        isOpen():检查 EntityManagerFactory 是否处于打开状态。实体管理器工厂创建后一直处于打开状态,除非调用close()方法将其关闭。

4)        close():关闭 EntityManagerFactory EntityManagerFactory 关闭后将释放所有资源,isOpen()方法测试将返回 false,其它方法将不能调用,否则将导致IllegalStateException异常

EntityManager

1.        EntityManager:在一组实体类底层数据源之间进行 O/R 映射的管理

2.        作用:是完成持久化操作的核心,即java实体类对象经过EntityManager变为持久化对象。


3.        实体的状态

1)        新建状态:   新创建的对象,尚未拥有持久性主键

2)        持久化状态:已经拥有持久性主键并和持久化建立了上下文环境

3)        游离状态拥有持久化主键,但是没有与持久化建立上下文环

4)        删除状态:  拥有持久化主键,已经和持久化建立上下文环境,但是从数据库中删除

find(Class<T> entityClass,Object primaryKey)

1.        参数类型:

1)        被查询的实体类类型。

2)        代查找实体的主键。

2.        作用:获得指定ID的实体类对象,若不存在则返回null。

getReference (Class<T> entityClass,ObjectprimaryKey)

1.        作用:类似于懒加载,首先获得实体类的代理对象,只用在用到时才加载。所以如果此 OID在数据库不存在,getReference()不会返回 null 值, 而是抛出异常EntityNotFoundException

persist (Object entity)

1.        作用:使对象由临时状态变为持久化状态。

1)        如果传入 persist() 方法的 Entity 对象已经处于持久化状态,则persist() 方法什么都不做。

2)        如果对删除状态的 Entity 进行 persist() 操作,会转换为持久化状态。

3)        如果对游离状态的实体执行persist() 操作,可能会在 persist() 方法抛出 EntityExistException(也有可能是在flush或事务提交后抛出)。

remove (Object entity)

1.        作用:删除实例,同时会删除相关联的数据库记录。

merge (T entity)

1.        作用:merge() 用于处理 Entity 的同步。即数据库的插入和更新操作。


1)        若传入的是一个临时对象:会创建一个新的对象,把临时对象的属性复制到新的对象中,然后对新的对象执行持久化操作。故新对象有ID,但之前的临时对象没有ID。

2)        若传入的是一个游离对象(对象有ID):若在EntityManager缓存中没有该对象,且在数据库中也没有对应记录,JPA会创建一个新的对象,然后把当前游离对象属性复制到性创建的对象中,ID不会复制,在对新的对象执行insert操作。故新对象与之前对象的ID不同。

3)        若传入的是一个游离对象(对象有ID):若在EntityManager缓存中没有该对象,且在数据库中也有对应的记录,则JPA会查询对应的记录,然后返回该记录对象,再然后会把游离对象的属性复制到查询到的对象中。对查到的对象执行update操作。

4)        若传入的是一个游离对象(对象有ID):若在EntityManager缓存中有对应的对象,JPA会把游离对象的属性复制到查询EntityManager缓存中的对象中,EntityManager缓存中的对象执行UPDATE。

JPA的EntityManager与Hibernate的Session方法异同

功能

JPA的EntityManager

Hibernate的Session

区别

查找

find

get

 

查找(懒加载)

getReference

Load

 

保存

persist

save

persist:若对象有 id, 则不能执行 insert 操作, 而会抛出异常.

删除

remove

delete

Remove只能移除持久化对象,而Hibernate的delete方法还可以移除游离对象。

保存OR更新

merge

saveOrUpdate

 

刷新

refresh

flush

refresh

flush

 

EntityTransaction

begin()

用于启动一个事务,此后的多个数据库操作将作为整体被提交或撤消。若这时事务已启动则会抛出 IllegalStateException 异常。

commit()

用于提交当前事务。即将事务启动以后的所有数据库更新操作持久化至数据库中。

rollback()

撤消(回滚)当前事务。即撤消事务启动后的所有数据库更新操作,从而不对数据库产生影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值