使用JPA完成实体的增删改查.ppt
《使用JPA完成实体的增删改查.ppt》由会员分享,可在线阅读,更多相关《使用JPA完成实体的增删改查.ppt(32页珍藏版)》请在三一办公上搜索。
1、第27章 使用JPA完成实体的增删改查,教材:Java EE实用教程,主要内容,27.1 实体的状态及操作27.2获取EntityManagerFactory27.3 获取实体管理器27.4 如何使用实体管理器27.5处理事务27.6 在Web中使用JPA,27.1 实体的状态及操作,27.1.1 持久化实体实例,通过调用实体管理器的persist方法可以使一个实体实例变成管理的和持久的。如果X是一个新的实体,会变成被管理的。在事务提交之前,X会被写到数据库中。如果X是一个已经存在的被管理的实体,持久操作将被忽略。但是如果X与它的关联实体之间的关系使用cascade=PERSIST或者casc
2、ade=ALL标注,意味着持久操作将影响所关联的实体,会持久化关联的实体。例如订单包含多个订单项,在持久化订单的时候,会持久化订单所涉及的订单项。如果X是一个删除的实体,它将变成被管理的。如果X是一个分离的对象,当调用persist操作的时候,将抛出EntityExistsException。或者在调用flush或者commit方法的时候产生类似的异常。对于所有实体X关联的实体Y,如果与Y的关联关系使用cascade=PERSIST或者cascade=ALL进行标注,持久操作将用于Y。例如在持久化订单的时候,与订单关联的订单项都会被持久化。,27.1.2 删除实体,通过调用实体管理器的remo
3、ve方法或者级联的删除操作,一个被管理的实体实例可以变成被删除的。如果X是一个新建的实体,remove操作将被忽略。但是删除操作会被级联到关联的实体,如果关联关系标注为cascade=REMOVE或者cascade=ALL。如果X是一个被管理的实体实例,删除操作使得这个实体实例变成被删除状态。删除操作会被级联到关联的实体,如果关联关系标注为cascade=REMOVE或者cascade=ALL。如果X是一个分离的实体,调用remove操作的时候,将抛出异常IllegalArgumentException。如果X是一个删除的实体,remove操作将被忽略。在事务被提交的时候或者之前,或者作为fl
4、ush操作的结果,被删除的实体X将被从数据库中删除。实体被删除之后,它的状态就是删除操作被调用的时候的状态。,27.1.3 同步到数据库,在事务提交的时候,实体的状态被更新到数据库中。同步操作会把对持久实体的更新以及对它们的关系更新写到数据库中。,27.1.4 分离实体,一个分离的实体可能来自:事务提交;事务回滚;删除持久上下文;关闭实体管理器;串行化一个实体或者通过值传递实体。分离的实体实例继续在持久上下文环境之外存在,它们的状态不再被保证与数据库中状态一致。,27.1.5 合并分离的实体状态,把分离的实例的状态传递给实体管理器管理的持久实体。,27.1.6 管理的实体实例,应用需要保证一个
5、实例只在一个持久上下文中被管理。contains方法可以用于确定一个实体实例是否被当前持久化上下文管理。contains方法返回true的情况是:实体已经被从数据库中检索到,并且还没有被删除和分离实体实例是新建的,已经使用persiste方法,或者已经被级联到persist操作。contains方法返回false的情况是:实例是分离的。对实体调用了remove方法,或者已经被级联了remove方法。如果实例是新建的,还没有被调用persist方法或者没有级联的persist。,27.2获取EntityManagerFactory,应用通过EntityManagerFactory接口来获取实体管
6、理器。通常EntityManagerFactory与persistence.xml中的persistenceUnit对应。实体管理工厂可以注入,也可以通过Persistence类获取。,27.2.1 通过注入获取实体管理器工厂,使用元注释:name:在环境引用上下文中访问EntityManagerFactory所使用的名字,如果使用依赖注入,就不需要了。默认值是空字符串。unitName:在persistence.xml中定义的持久单元的名字。例如:PersistenceUnitEntityManagerFactory emf;,27.2.2 通过Persistence类获取,通过调用类的cr
7、eateEntityManagerFactory方法来创建实体管理器工厂。参数是持久单元的名字。EntityManagerFactory emf=Persistence.createEntityManagerFactory(OrderEM);,27.3 获取实体管理器,EntityManager接口定义了与持久上下文环境进行交互的方法。包括创建实体、删除实体、修改实体、根据主键查询实体以及使用Query对象查询实体的方法。实体管理器的获取可以通过3种方式:注入实体管理器;查找实体管理器;使用实体管理器工厂创建实体管理器。,27.3.1 注入实体管理器,使用PersistenceContext注
8、释来注入实体管理器。属性如下:name,在上下文环境引用中(例如SessionContext)访问实体管理器所使用的名字,如果使用依赖注入,就不需要了。默认值是空字符串。unitName,持久单元的名字,如果指定了unitName元素,必须与在JNDI中能够访问的实体管理器的持久单元的名字相同。默认值是空字符串。type,指定事务类型,事务类型包括扩展持久上下文(EXTEDNED)和事务范围的持久上下文(TRANSACTION)。使用PersistenceContextType.EXTENDED或者PersistenceContextType.TRANSACTION表示。properties,
9、为容器或者持久提供者指定属性。与特定持久性提供厂商相关的属性也可以包含在这组属性中。提供商不识别的属性将被忽略。默认值是。,27.3.1 注入实体管理器,下面的代码用于注入实体管理器。例1:PersistenceContext EntityManager em;例2:PersistenceContext(type=PersistenceContextType.EXTENDED)EntityManager orderEM;,27.3.2 通过简单查询查找实体管理器,首先需要在会话Bean的Bean类上通过PersistenceContext声明实体管理器,然后在会话Bean中查找该实体管理器。在
10、会话Bean的Bean类上声明持久上下文:PersistenceContext(name=orderEM)注入SessionContext:Resource SessionContext ctx;查找实体管理器:EntityManager em=(EntityManager)ctx.lookup(orderEM);,27.3.3 通过实体管理器工厂创建实体管理器,当使用应用管理的实体管理器的时候,应用必须使用实体管理器工厂来管理实体管理器和持久上下文生命周期,需要通过实体管理器工厂获取实体管理器。通常在Java SE环境下使用。实体管理器工厂是EntityManagerFactory的对象,假
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 JPA 完成 实体 增删
链接地址:https://www.31ppt.com/p-5922804.html