JPA(三) JPA API初探

简介:

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);
  }


本文转自 乌英达姆 51CTO博客,原文链接:http://blog.51cto.com/7156680/2053948
相关文章
|
9月前
|
存储 缓存 Java
简化持久化操作:深入了解 JPA(Java Persistence API)
在现代的应用程序开发中,数据库持久化操作是一个常见的需求,因此使用一种方便、标准的方式来进行持久化操作非常重要。JPA(Java Persistence API)作为一项 Java 标准,提供了一种标准化的方式来进行对象关系映射(ORM)操作,使得持久化操作更加便捷和规范。在本文中,我们将详细介绍 JPA 的核心概念、特性以及在实际应用中的优势。
255 0
|
SQL Java API
实体bean(entity)配置,jpa增删改api,JPAsql增删改
1.ORM框架必然发展趋势: jdbc-&gt;hibernate(是产品,实现jpa规范)-&gt;jpa(是规范,不是产品)。ps:运用jpa规范的API进行编程,不对Hiberbate,topLink等orm框架构成威胁。 2.JPA环境搭建[hibernate-distribution-3.6.10.Final] 1.准备lib包2.jar包引入时,千万注意目录不能有中
1993 0
|
1月前
|
缓存 前端开发 API
API接口封装系列
API(Application Programming Interface)接口封装是将系统内部的功能封装成可复用的程序接口并向外部提供,以便其他系统调用和使用这些功能,通过这种方式实现系统之间的通信和协作。下面将介绍API接口封装的一些关键步骤和注意事项。
|
27天前
|
SQL API Python
Python DB API下规范下cursor对象常用接口
Python DB API下规范下cursor对象常用接口。
21 4
|
2天前
|
JSON 搜索推荐 数据挖掘
电商数据分析的利器:电商关键词搜索API接口(标题丨图片丨价格丨链接)
淘宝关键词搜索接口为电商领域的数据分析提供了丰富的数据源。通过有效利用这一接口,企业和研究人员可以更深入地洞察市场动态,优化营销策略,并提升用户体验。随着电商平台技术的不断进步,未来的API将更加智能和个性化,为电商行业带来更多的可能性。
|
10天前
|
存储 缓存 运维
DataWorks操作报错合集之DataWorks根据api,调用查询文件列表接口报错如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
21 1
|
10天前
|
SQL 数据管理 API
数据管理DMS产品使用合集之阿里云DMS提供API接口来进行数据导出功能吗
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
|
10天前
|
运维 Serverless API
Serverless 应用引擎产品使用之在阿里函数计算中开启函数计算 API 接口如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
109 6
|
13天前
|
前端开发 Java 测试技术
IDEA 版 API 接口神器来了,一键生成文档,贼香!
IDEA 版 API 接口神器来了,一键生成文档,贼香!
36 0
|
14天前
|
API 开发者
邮件API接口使用的方法和步骤
AOKSEND指南:了解和使用邮件API接口,包括选择适合的接口(如AOKSEND、Mailgun、SMTP),获取访问权限,配置发件人、收件人及邮件内容,调用接口发送邮件,并处理返回结果,以高效集成邮件功能。