一、EntityManager的一些主要的接口方法:
【1】void persist(Object entity)
将新实体实例转换为受控状态
【2】void remove(Object entity)
删除某个实体对象,也就是删除数据库中的某条记录
【3】void flush()
将受控态的实体数据同步到数据库中
【4】T merge(T entity)
游离态的实体持久化到数据库中,并转换为受控态的实体
【5】T find(Class entityClass, Object primaryKey)
以主键查询实体对象,entityClass是实体的类,primaryKey是主键值
【使用JPA实现数据的加载/修改】
public void updatePerson() throws exception{
......
Person p = em.find(Person.class, new Long(2)); // 根据主键加载
p.setName("创"); // 先加载,再更新,不再需要繁琐的逐字段编码
p.getAddress.setStreet("司马24");
......
em.getTransaction().begin(); // 更新数据需要进行事务控制
em.merge(p);
em.getTransaction().commit();
p = em.find(Person class, new Long(2));
assertEquals(p.getName(),"创");
assertEquals(p.getAddress().getStreet(),"司马24");
}
【使用JPA实现数据的加载/删除】
public void removePerson() throws Exception{
javax..persistence.EntityManager em = emf.createEntityManager();
Person p = em.find(Person.class, new Long(2)); // 先加载,再删除
try{
em.getTransaction().begin(); // 删除数据需要进行事务控制
em.remove(p); // 级联删除
em.getTransaction().commit();
p = em.find(Person.class, new Long(2));
assertNull(p);
}catch(Exception e){
......
}
}
二、JPA的生命周期--实体状态
【新建态 new】:新创建的实体对象,尚未拥有持久化主键,没有和一个持久化上下文关联起来
【受控态managed】:已经拥有持久化主键并和持久化上下文建立了联系
【游离态 detached】:拥有持久化主键,但尚未和持久化上下文建立联系
【删除态 removed】:拥有持久化主键,已经和持久化上下文建立联系,但已经被安排从数据库中删除