JPA之使用JPA加载_更新_删除对象

修改测试类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();
	}
	
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值