修改测试类PersonTest.java中的代码进行测试:
package junit.test;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.junit.Before;
import org.junit.Test;
import cn.sunft.bean.Person;
/**
* 对Person类进行单元测试
*/
public class PersonTest {
@Before
public void setUpBeforeClass() {
}
@Test
public void save() {
//创建工厂的时候就会创建表,参数值与persistence.xml中的必须一致
EntityManagerFactory entityManagerFactory
= Persistence.createEntityManagerFactory("sunft_first");
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();//开启事务
entityManager.persist(new Person("卡卡罗特"));
entityManager.getTransaction().commit();//提交事务
entityManager.close();
entityManagerFactory.close();
}
/**
* 非懒加载查询
*/
@Test
public void getPerson(){
EntityManagerFactory factory
= Persistence.createEntityManagerFactory("sunft_first");
EntityManager em = factory.createEntityManager();
//如果数据库中不存在该条记录则返回null
Person person = em.find(Person.class, 13);
System.out.println(person.getName());
em.close();
factory.close();
}
/**
* 懒加载查询方式
*/
@Test
public void getPerson2(){
EntityManagerFactory factory
= Persistence.createEntityManagerFactory("sunft_first");
EntityManager em = factory.createEntityManager();
Person person = em.getReference(Person.class, 13);
//这句代码才会从数据拿到数据
//如果数据库中不存在该条记录则抛出异常
System.out.println(person.getName());
em.close();
//懒加载异常应该会报错,但在Hibernate5测试时能正常输出
System.out.println(person.getName());
factory.close();
}
/**
* 更新对象
* 对象的几种状态:
* new
* managed 托管
* 游离(脱管)
* 删除
*/
@Test
public void updatePerson(){
EntityManagerFactory factory
= Persistence.createEntityManagerFactory("sunft_first");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();//开始事务
Person person = em.find(Person.class, 13);
person.setName("老张");
//直接提交事务就可以执行更新了
em.getTransaction().commit();
em.close();
factory.close();
}
@Test
public void updatePerson2(){
EntityManagerFactory factory
= Persistence.createEntityManagerFactory("sunft_first");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();//开始事务
Person person = em.find(Person.class, 13);
em.clear();//把实体管理器中的所有实体变成游离状态
person.setName("老李");
//正确更新游离状态的对象
em.merge(person);
em.getTransaction().commit();
em.close();
factory.close();
}
@Test
public void delete() {
EntityManagerFactory factory
= Persistence.createEntityManagerFactory("sunft_first");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();//开始事务
Person person = em.find(Person.class, 13);
//要想正确删除对象,该对象必须处于托管状态
em.remove(person);
em.getTransaction().commit();
em.close();
factory.close();
}
}