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
相关文章
|
5天前
|
SQL Java API
Java一分钟之-JPA:Java持久化API简介
【5月更文挑战第14天】Java Persistence API (JPA) 是Java的ORM规范,用于简化数据库操作。常见问题包括实体映射、事务管理和性能问题。避免错误的关键在于明确主键策略、妥善使用事务、优化查询及理解实体生命周期。示例展示了如何定义实体和使用`EntityManager`保存数据。JPA通过标准化API让开发者更专注于业务逻辑,提升开发效率和代码维护性。
14 0
|
9月前
|
存储 缓存 Java
简化持久化操作:深入了解 JPA(Java Persistence API)
在现代的应用程序开发中,数据库持久化操作是一个常见的需求,因此使用一种方便、标准的方式来进行持久化操作非常重要。JPA(Java Persistence API)作为一项 Java 标准,提供了一种标准化的方式来进行对象关系映射(ORM)操作,使得持久化操作更加便捷和规范。在本文中,我们将详细介绍 JPA 的核心概念、特性以及在实际应用中的优势。
271 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包引入时,千万注意目录不能有中
1996 0
|
3天前
|
监控 安全 数据挖掘
Email 接口API有哪些?具体分析一下阿里云和AOK的优点
本文介绍了常见的Email接口API,如阿里云邮件推送、AOKSend、SendGrid、Mailgun和Amazon SES。阿里云API以其高稳定性和数据分析功能脱颖而出,支持批量发送和多语言;而AOKSend API以易于集成、高安全性和优秀客户支持为亮点。企业在选择时应考虑自身需求和预算,以优化邮件营销效果。
|
3天前
|
定位技术 API
Angular 调用导入百度地图API接口,2024春招BAT面试真题详解
Angular 调用导入百度地图API接口,2024春招BAT面试真题详解
|
4天前
|
JSON 安全 API
解锁淘宝商品评论API接口:电商数据分析的新视角
淘宝商品评论API接口是淘宝开放平台提供的一组API接口,允许开发者通过编程方式获取淘宝商品评论数据。这些接口可以获取到商品的详细信息、用户评论、评分等数据,为电商数据分析提供了丰富的素材。
|
4天前
|
缓存 负载均衡 安全
探索API接口开发(定制与开发接口)
在当今数字化、互联互通的时代,API(应用程序编程接口)已经成为连接不同软件、服务和应用的关键桥梁。API接口开发,作为软件架构和系统设计的重要组成部分,不仅影响着数据交换的效率,更决定了整个系统的灵活性和可扩展性。本文将深入探讨API接口开发的各个方面,包括其重要性、开发流程、最佳实践以及面临的挑战。
|
4天前
|
文字识别 API 开发工具
印刷文字识别产品使用合集之API接口无法调用如何解决
印刷文字识别(Optical Character Recognition, OCR)技术能够将图片、扫描文档或 PDF 中的印刷文字转化为可编辑和可搜索的数据。这项技术广泛应用于多个领域,以提高工作效率、促进信息数字化。以下是一些印刷文字识别产品使用的典型场景合集。
27 6
|
5天前
|
监控 供应链 数据挖掘
抖音电商新篇章:douyin.item_get API接口的深度应用
douyin.item_get接口最基本的应用就是获取商品的详细信息。商家可以通过输入商品的ID或链接,获取商品的标题、价格、图片、描述、规格等关键信息。这些信息对于商家来说至关重要,可以帮助他们了解商品的销售情况、竞争态势以及市场需求。
|
5天前
|
安全 API 开发者
智能体-Agent能力升级!新增Assistant API & Tools API服务接口
ModelScope-Agent是一个交互式创作空间,它支持LLM(Language Model)的扩展能力,例如工具调用(function calling)和知识检索(knowledge retrieval)。它已经对相关接口进行了开源,以提供更原子化的应用LLM能力。用户可以通过Modelscope-Agent上的不同代理(agent),结合自定义的LLM配置和消息,调用这些能力。

热门文章

最新文章