JPA 学习日志3
来源:互联网 发布:小学生模拟考试软件 编辑:程序博客网 时间:2024/06/06 01:38
三、几个常用的接口和类
1. EntityManagerFactory->EntityManager->begin事务(事务增、删、改时必须使用)
相当于SessionFacotry->session->begin事务
@Test
public void save() {//保存
EntityManagerFactory factory = Persistence.createEntityManagerFactory("itcast");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();//读取不要事务,添加、更新、删除需要事务
em.persist(new Buyer("susen","1234","ss@ss.com"));
em.getTransaction().commit();
em.close();
factory.close();
}
n em.persist();//持久化,保存
n em.remove();//删除
n em.find(Buyer.class, "susen");//第一个参数是类,第二个参加通过主键的内容查找
n em.clear();//使实体对象变成游离状态,修改内容不能更新到数据库
n em.merge();//更新,将游离状态更新(同步)到数据库
n em.refresh();//如果数据库中的内容被改变后,我们在程序中可以用这个,得到最新的数据不能再次调用find方法,因为find方法会从em的一级缓存中取出未更新前的数据。
2. 实体对象拥有以下4个状态,这些状态通过调用EntityManager接口方法发生迁移:
n 新建态:新创建的实体对象,尚未拥有持久化主键,没有和一个持久化上下文关联起来;
n 受控态:已经拥有持久化主键并和持久化上下文建立了联系;
n 游离态:拥有持久化主键,但尚未和持久化上下文建立联系;
n 删除态:拥有持久化主键,已经和持久化上下文建立联系,但已经被安排从数据库中删除。
3. EntityManager 的API
下面是EntityManager的一些主要的接口方法:
n void persist(Object entity)
通过调用EntityManager的persist()方法,新实体实例将转换为受控状态。这意谓着当persist ()方法所在的事务提交时,实体的数据将保存到数据库中。如果实体已经被持久化,那么调用persist()操作不会发生任何事情。如果对一个已经删除的 实体调用persist()操作,删除态的实体又转变为受控态。如果对游离状的实体执行persist()操作,将抛出 IllegalArgumentException。
在一个实体上调用persist()操作,将广播到和实体关联的实体上,执行相应的级联持久化操作;
n void remove(Object entity)
通过调用remove()方法删除一个受控的实体。如果实体声明为级联删除(cascade=REMOVE 或者cascade=ALL ),被关联的实体也会被删除。在一个新建状态的实体上调用remove()操作,将被忽略。如果在游离实体上调用remove()操作,将抛出 IllegalArgumentException,相关的事务将回滚。如果在已经删除的实体上执行remove()操作,也会被忽略;
n void flush()
将受控态的实体数据同步到数据库中;
n T merge(T entity)
将一个游离态的实体持久化到数据库中,并转换为受控态的实体;
n T find(Class entityClass, Object primaryKey)
以主键查询实体对象,entityClass是实体的类,primaryKey是主键值,如以下的代码查询Topic实体:
Topic t = em.find(Topic.class,1);
- JPA 学习日志3
- JPA 学习日志 1
- JPA 学习日志2
- JPA 学习日志 4
- JPA 学习日志 5
- JPA日志批量入库
- JPA学习笔记(3)——JPA注解
- JPA学习笔记(3)——JPA注解
- jpa学习3-spring data jpa 入门环境搭建
- JPA学习笔记(3)——JPA注解
- JPA学习
- JPA学习
- JPA学习
- JPA学习
- JPA学习
- JPA学习
- JPA学习
- JPA学习
- JPA 学习日志2
- fastreport中的对汉字的支持
- 修改Ubuntu dash shell为bash shell
- ShopNum1分销版与其他同类型软件的区别
- untitled
- JPA 学习日志3
- Flex 三种导航容器 ViewStack TabNavigator Accordion
- 思考微内核
- JPA 学习日志 4
- automake编译脚本
- JPA 学习日志 5
- 查找数组最大值最小值:时间复杂度最多为:o(3n/2)
- Oracle中日期时间的操作比较和加减
- SQL Server 2005 如何创建分区表