JPA学习笔记(三)—— JPA API

本文详细介绍了JPA的API用法,包括Persistence如何获取EntityManagerFactory,EntityManager中的find、getReference、persist、merge、flush方法,以及EntityTransaction的begin、commit和rollback。这些方法涵盖了对象的持久化、查询以及事务管理,是理解和使用JPA的关键。
摘要由CSDN通过智能技术生成

1. Persistence

Persistence 类用于获取 EntityManagerFactory 实例。该类包含一个名为 createEntityManagerFactory 的静态方法 。
createEntityManagerFactory 方法有如下两个重载版本。

  1. 带有一个参数的方法以 JPA 配置文件 persistence.xml 中的持久化单元名为参数。
  2. 带有两个参数的方法:前一个参数含义相同,后一个参数 Map 类型,用于设置 JPA 的相关属性,这时将忽略其它地方设置的属性。
    例如:
    Map<String, Object> properties = new HashMap<>();
    properties.put("hibernate.show_sql", false);
    

2. EntityManager

2.1 find(Class aClass, Object o)

类似于 Hibernate 中 Session 的 get 方法。
在调用 find 方法的同时就发送 SELECT 语句。

@Test
public void testFind() {
    Customer customer = entityManager.find(Customer.class, 1);
}

2.2 getReference(Class aClass, Object o)

类似于 hibernate 中 Session 的 load 方法。
返回的是 Customer 对象的代理,真正要使用的时候才会发送 SELECT 语句查询。
与 Hibernate 相同,若在 customer 还是代理对象时关闭 transaction ,会出现懒加载异常。

@Test
public void testGetReference() {
    Customer customer = entityManager.getReference(Customer.class, 1);
}

2.3 persist(Object o)

类似于 hibernate 的 save 方法,使对象由临时状态变为持久化状态。
和 hibernate 的 save 方法的不同之处:若对象有 id,则不能执行 insert 操作,而会抛出 PersistenceException 异常。

@Test
public void testPersistence() {
	entityManager.persist(new Customer());
}

2.4 persist(Object o)

类似于 hibernate 中 Session 的 delete 方法,对象对应的记录从数据库中移除。
但注意: 该方法只能移除持久化对象,而 hibernate 的 delete 方法实际上还可以移除游离对象。

@Test
public void testRemove() {
    Customer customer = entityManager.find(Customer.class, 2);
    entityManager.remove(customer);
}

2.5 merge(Object o)

总的来说:类似于 hibernate Session 的 saveOrUpdate 方法。

  1. 若传入的是一个临时对象,会创建一个新的对象,把临时对象的属性复 制到新的对象中,然后对新的对象执行持久化操作。

    所以新的对象中有 id,但以前的临时对象中没有 id。

  2. 若传入的是一个游离对象, 即传入的对象有 OID

    1. 若在 EntityManager 缓存中没有该对象
    2. 若在数据库中对应的记录
    3. JPA 会查询对应的记录, 然后返回该记录对一个的对象, 再然后会把游离对象的属性复制到查询到的对象中
    4. 对查询到的对象执行 update 操作
  3. 若传入的是一个游离对象, 即传入的对象有 OID

    1. 若在 EntityManager 缓存中没有该对象
    2. 若在数据库中也没有对应的记录
    3. JPA 会创建一个新的对象, 然后把当前游离对象的属性复制到新创建的对象中
    4. 对新创建的对象执行 insert 操作
  4. 若传入的是一个游离对象, 即传入的对象有 OID

    1. 若在 EntityManager 缓存中对应的对象
    2. JPA 会把游离对象的属性复制到 EntityManager 缓存中的对象中
    3. 对 EntityManager 缓存中的对象执行 UPDATE

2.6 flush(Object o)

同 hibernate 中 Session 的 flush 方法
使缓存中对象的状态与数据库中实体的状态保持一致

2.7 createQuery(String qlString)

创建一个查询对象。

2.8 createNamedQuery(String name)

根据命名的查询语句块创建查询对象。参数为命名的查询语句。

2.9 createNativeQuery(String sqlString)

使用标准 SQL语句创建查询对象。参数为标准SQL语句字符串。

2.10 createNativeQuery(String sqls, String resultSetMapping)

使用标准SQL语句创建查询对象,并指定返回结果集 Map的 名称。

3. EntityTransaction

3.1 begin()

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

3.2 commit()

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

3.3 rollback()

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值