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 实例.该接口主要包含以下四个方法session

  • 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语句查询实体。ide

//开启事务
    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或事务提交后抛出)code

/**
   * 相似于 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) 方法

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

/**
   * 相似于 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);
  }
相关文章
相关标签/搜索