3、JPA-API
2021-06-16 12:03
                         标签:factory   manager   factor   上下   不能   设置   静态   属性   包含    Persistence 类用于获取 EntityManagerFactory 实例,该类包含一个名为 createEntityManagerFactory 的静态方法 。 createEntityManagerFactory 方法有两个重载。 在 JPA 规范中,EntityManager 是完成持久化操作的核心对象。 实体作为普通 Java 对象,只有在调用 EntityManager 将其持久化后才会变成持久化对象。 EntityManager 对象在一组实体类与底层数据源之间进行 O/R 映射的管理,它可以用来管理和更新 Entity Bean,根椐主键查找 Entity Bean,还可以通过JPQL语句查询实体。   新建状态:新创建的对象,尚未拥有持久性主键。 持久化状态:已经拥有持久性主键并和持久化建立了上下文环境。 游离状态:拥有持久化主键,但是没有与持久化建立上下文环境。 删除状态:拥有持久化主键,已经和持久化建立上下文环境,但是从数据库中删除。   3、JPA-API 标签:factory   manager   factor   上下   不能   设置   静态   属性   包含    原文地址:https://www.cnblogs.com/jhxxb/p/10348702.htmlPersistence
// persistence.xml 的持久化单元名
String persistenceUnitName = "jpaname";
/**
 * 带有一个参数的方法:以 JPA 配置文件 persistence.xml 中的持久化单元名为参数
 */
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(persistenceUnitName);// persistence.xml 的持久化单元名
String persistenceUnitName = "jpaname";
Map
EntityManagerFactory
/**
 * EntityManagerFactory 接口主要用来创建 EntityManager 实例。
 * createEntityManager():用于创建实体管理器对象实例。
 * createEntityManager(Map map):用于创建实体管理器对象实例的重载方法,Map 参数用于提供 EntityManager 的属性
 * isOpen():检查 EntityManagerFactory 是否处于打开状态。实体管理器工厂创建后一直处于打开状态,除非调用close()方法将其关闭
 * close():关闭 EntityManagerFactory。EntityManagerFactory 关闭后将释放所有资源,isOpen()方法测试将返回 false,其它方法将不能调用,否则将导致IllegalStateException异常
 */
// 创建 EntityManager. 类似于 Hibernate 的 SessionFactory
EntityManager entityManager = entityManagerFactory.createEntityManager();
EntityManager
EntityManager#find
package jpa.test;
import com.jpa.entity.Customer;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
public class JPATest {
    private EntityManagerFactory entityManagerFactory;
    private EntityManager entityManager;
    private EntityTransaction transaction;
    @Before
    public void init(){
        entityManagerFactory = Persistence.createEntityManagerFactory("jpaname");
        entityManager = entityManagerFactory.createEntityManager();
        transaction = entityManager.getTransaction();
        transaction.begin();
    }
    @After
    public void destroy(){
        transaction.commit();
        entityManager.close();
        entityManagerFactory.close();
    }
    // 类似于 hibernate 中 Session 的 get 方法.
    @Test
    public void testFind() {
        Customer customer = entityManager.find(Customer.class, 1);
        System.out.println("-------------------------------------");
        System.out.println(customer);
    }
}
 
EntityManager#getReference
// 类似于 hibernate 中 Session 的 load 方法
@Test
public void testGetReference(){
    Customer customer = entityManager.getReference(Customer.class, 1);
    System.out.println(customer.getClass().getName());
    System.out.println("-------------------------------------");
    System.out.println(customer);
}
 
 // 在使用之前关闭 EntityManager,会发生懒加载异常
@Test
public void testGetReference(){
    Customer customer = entityManager.getReference(Customer.class, 1);
    System.out.println(customer.getClass().getName());
    System.out.println("-------------------------------------");
    transaction.commit();
    entityManager.close();
    System.out.println(customer);
}
 
实体类的几种状态:
EntityManager#persistence
// 类似于 hibernate 的 save 方法. 使对象由临时状态变为持久化状态
// 和 hibernate 的 save 方法的不同之处: 若对象有 id, 则不能执行 insert 操作, 会抛出异常
@Test
public void testPersistence(){
    Customer customer = new Customer();
    customer.setAge(15);
    customer.setBirth(new Date());
    customer.setCreatedTime(new Date());
    customer.setEmail("bb@163.com");
    customer.setLastName("BB");
    
    //customer.setId(100);
    
    entityManager.persist(customer);
    
    System.out.println(customer.getId());
}
  
EntityManager#remove
// 类似于 hibernate 中 Session 的 delete 方法,把对象对应的记录从数据库中移除
// 该方法只能移除 持久化 对象,而 hibernate 的 delete 方法实际上还可以移除 游离对象
@Test
public void testRemove(){
//  Customer customer = new Customer();
//  customer.setId(2);
    Customer customer = entityManager.find(Customer.class, 2);
    entityManager.remove(customer);
}
上一篇:【C#】Color颜色对照表
下一篇:airtest之api、图片处理