package cn.jobs1127.jpa.crud;
import java.util.Date;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class entityManager_CRUD_Test {
private EntityManagerFactory entityManagerFactory;
private EntityManager entityManager;
private EntityManager entityManager1;
@Before
public void init(){
/**
* createEntityManager():用于创建实体管理器对象实例。
* createEntityManager(Map map):用于创建实体管理器对象实例的重载方法,Map 参数用于提供 EntityManager 的属性。
*/
entityManagerFactory = Persistence.createEntityManagerFactory(“jpa-jobs1127”);
entityManager = entityManagerFactory.createEntityManager();
entityManager1 = entityManagerFactory.createEntityManager();
}
@After
public void destroy(){
entityManager.close();
entityManagerFactory.close();
}
/**
* 类似于 hibernate 的 save 方法. 使对象由临时状态变为持久化状态.
* 和 hibernate 的 save 方法的不同之处: 若对象有 id, 则不能执行 insert操作, 而会抛出异常.
*/
@Test
public void testPersistence(){
System.out.println(entityManager1==entityManager);
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(2);//有id,不执行,hibernate的session save时可以
/**
* 不开启事务是不会执行持久化操作的,
* 可以猜测这个entityManager对象类似Hibernate的getCurrentSession()的session对象
*/
entityManager.getTransaction().begin();
entityManager.persist(customer);
entityManager.getTransaction().commit();
System.out.println(customer.getId());
}
@Test
public void testRemove1(){
// Customer customer = new Customer();
// customer.setId(2);//游离对象不可移除,会出错
//find类似于Hibernate的get()方法,找到的是持久化状态的对象
Customer customer = entityManager.find(Customer.class, 2);
//没开启事务是操作不成功的
entityManager.getTransaction().begin();
entityManager.remove(customer);
entityManager.getTransaction().commit();
}
@Test
public void testRemove2(){
// Customer customer = new Customer();
// customer.setId(2);//游离对象不可移除,会出错
//getReference()类似于Hibernate的load()方法,拿到的是动态代理对象,处于detached状态
Customer customer = entityManager.getReference(Customer.class, 3);
//没开启事务是操作不成功的