博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JPA(三) JPA API初探
阅读量:5971 次
发布时间:2019-06-19

本文共 3333 字,大约阅读时间需要 11 分钟。

JPA(三) JPA API初探

标签: JPA,API


Persistence 类

该类用于获取 EntityManagerFactory 实例。该类包含一个名为 createEntityManagerFactory 的 静态方法 。

  • createEntityManagerFactory 方法有如下两个重载版本。
  • 带有一个参数的方法以 JPA 配置文件 persistence.xml 中的持久化单元名为参数
  • 带有两个参数的方法:前一个参数含义相同,后一个参数 Map类型,用于设置 JPA 的相关属性,这时将忽略其它地方设置的属性。Map 对象的属性名必须是 JPA 实现库提供商的名字空间约定的属性名。代码示例如下:
//创建EntityManagerFactory方法    String persistenceUnitName = "JAP-1";  //此处的名称为配置文件中的名称    EntityManagerFactory factory = Persistence.createEntityManagerFactory(persistenceUnitName);

EntityManagerFactory 接口

主要用来创建 EntityManager 实例.该接口主要包含如下四个方法

  • createEntityManager():用于创建实体管理器对象实例。
  • createEntityManager(Map map):用于创建实体管理器对象实例的重载方法,Map 参数用于提供 EntityManager 的属性。
  • isOpen():检查 EntityManagerFactory 是否处于打开状态。实体管理器工厂创建后一直处于打开状态,除非调用close()方法将其关闭。
  • close():关闭 EntityManagerFactory 。 EntityManagerFactory 关闭后将释放所有资源,
    isOpen()方法测试将返回 false,其它方法将不能调用,否则将导致IllegalStateException异常。
//创建EntityManager      EntityManager manager = factory.createEntityManager();

EntityManager

在 JPA 规范中, EntityManager 是完成持久化操作的核心对象。实体作为普通 Java 对象,只有在调用 EntityManager 将其持久化后才会变成持久化对象。EntityManager 对象在一组实体类与底层数据源之间进行 O/R 映射的管理。它可以用来管理和更新 Entity Bean, 根椐主键查找 Entity Bean, 还可以通过JPQL语句查询实体。

//开启事务    EntityTransaction transaction = manager.getTransaction();    transaction.begin();

find(Class<T> entityClass,Object primaryKey) 方法

返回指定的 OID 对应的实体类对象,如果这个实体存在于当前的持久化环境,则返回一个被缓存的对象;否则会创建一个新的 Entity, 并加载数据库中相关信息;若 OID 不存在于数据库中,则返回一个 null。第一个参数为被查询的实体类类型,第二个参数为待查找实体的主键值。

//类似于Hibernate中session 的find方法  @Test  public void testFind() {    Customer customer = manager.find(Customer.class,1);    System.out.println("----------------------------");    System.out.println(customer);  }

getReference (Class<T> entityClass,Object primaryKey) 方法

与find()方法类似,不同的是:如果缓存中不存在指定的 Entity, EntityManager 会创建一个 Entity 类的代理,但是不会立即加载数据库中的信息,只有第一次真正使用此 Entity 的属性才加载,所以如果此 OID 在数据库不存在,getReference() 不会返回 null 值, 而是抛出EntityNotFoundException

//类似于Hibernate 中的 load 方法  @Test  public void testGetReference(){    Customer customer = manager.getReference(Customer.class,1);    System.out.println(customer.getClass().getName());    System.out.println("----------------------------");    System.out.println(customer);  }

persist (Object entity) 方法

用于将新创建的 Entity 纳入到 EntityManager 的管理。该方法执行后,传入 persist() 方法的 Entity 对象转换成持久化状态。

如果传入 persist() 方法的 Entity 对象已经处于持久化状态,则 persist() 方法什么都不做。
如果对删除状态的 Entity 进行 persist() 操作,会转换为持久化状态。
如果对游离状态的实体执行 persist() 操作,可能会在 persist() 方法抛出 EntityExistException(也有可能是在flush或事务提交后抛出)

/**   * 类似于 Hibernate 的save 方法,使对象由临时状态变为持久化状态   * 不同之处:若对象有 Id 则不能执行 Insert 操作,而会抛出异常   */  @Test  public void testPersistence(){    Customer customer = new Customer();    customer.setAge(12);    customer.setEmail("123");    customer.setLastName("Tom");    customer.setCreateDate(new Date());    customer.setBirthday(new Date());    manager.persist(customer);    System.out.println("Id=" + customer.getId());  }

remove (Object entity) 方法

删除实例。如果实例是被管理的,即与数据库实体记录关联,则同时会删除关联的数据库记录。

/**   * 类似于 Hibernate 的delete 方法,把对象对应的记录从数据库删除   * 在JPA中该方法只能删除持久化对象,但是 Hibernate 不但可以删除持久化对象,还可以删除游离对象   */  @Test  public void testRemove(){    //此代码会报错,因为该方法只能移除持久化对象,不能移除游离对象//    Customer customer = new Customer();//    customer.setId(3);    //正确的方法    Customer customer =manager.find(Customer.class, 3);    manager.remove(customer);  }

转载于:https://blog.51cto.com/7156680/2053948

你可能感兴趣的文章
AI切入养老大健康,漫谷科技发布“正钛” 健康服务机器人 ...
查看>>
Java Spring AOP的两种配置方式
查看>>
PostgreSQL sharding : citus 系列1 - 多机部署(含OLTP(TPC-B)测试)- 含Citus MX模式...
查看>>
Android 冷兵器 之 tools
查看>>
代码模板:python-基础-4(时间戳转换)
查看>>
音乐应在你的指尖流淌——工具和代码无关
查看>>
个推技术实现原理介绍
查看>>
oc 与 js交互之vue.js
查看>>
【JavaWeb】图书管理系统【总结】
查看>>
豆瓣源
查看>>
02.SQLServer性能优化之---水平分库扩展
查看>>
Centos7安装greenplum遇到的问题
查看>>
动态权限<一>基本介绍
查看>>
24个终极数据科学项目(可免费获取资源)
查看>>
苹果6跟淘云互动连接不上怎么回事
查看>>
解决java.lang.IllegalArgumentException: 'Content-Type' cannot contain wildcard type '*'异常(真实有效)...
查看>>
强大的 VS Code
查看>>
奔驰更新道路救援APP,融入了AR技术
查看>>
Magix中的缓存模块
查看>>
xinetd被动服务唤醒
查看>>