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、图片处理