第27章 用JPA完成实体的增删改查.ppt

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
27.1 实体的状态及操作 27.1.1 持久化实体实例 通过调用实体管理器的persist方法可以使一个实体实例变成管理的和持久的。 如果X是一个新的实体,会变成被管理的。在事务提交之前,X会被写到数据库中。 如果X是一个已经存在的被管理的实体,持久操作将被忽略。但是如果X与它的关联实体之间的关系使用cascade=PERSIST或者cascade=ALL标注,意味着持久操作将影响所关联的实体,会持久化关联的实体。例如订单包含多个订单项,在持久化订单的时候,会持久化订单所涉及的订单项。 如果X是一个删除的实体,它将变成被管理的。 如果X是一个分离的对象,当调用persist操作的时候,将抛出EntityExistsException。或者在调用flush或者commit方法的时候产生类似的异常。 对于所有实体X关联的实体Y,如果与Y的关联关系使用cascade=PERSIST或者cascade=ALL进行标注,持久操作将用于Y。例如在持久化订单的时候,与订单关联的订单项都会被持久化。 27.1.2 删除实体 通过调用实体管理器的remove方法或者级联的删除操作,一个被管理的实体实例可以变成被删除的。 如果X是一个新建的实体,remove操作将被忽略。但是删除操作会被级联到关联的实体,如果关联关系标注为cascade=REMOVE或者cascade=ALL。 如果X是一个被管理的实体实例,删除操作使得这个实体实例变成被删除状态。删除操作会被级联到关联的实体,如果关联关系标注为cascade=REMOVE或者cascade=ALL。 如果X是一个分离的实体,调用remove操作的时候,将抛出异常IllegalArgumentException。 如果X是一个删除的实体,remove操作将被忽略。 在事务被提交的时候或者之前,或者作为flush操作的结果,被删除的实体X将被从数据库中删除。 实体被删除之后,它的状态就是删除操作被调用的时候的状态。 27.1.3 同步到数据库 在事务提交的时候,实体的状态被更新到数据库中。 同步操作会把对持久实体的更新以及对它们的关系更新写到数据库中。 27.1.4 分离实体 一个分离的实体可能来自: 事务提交; 事务回滚; 删除持久上下文; 关闭实体管理器; 串行化一个实体或者通过值传递实体。 分离的实体实例继续在持久上下文环境之外存在,它们的状态不再被保证与数据库中状态一致。 27.1.5 合并分离的实体状态 把分离的实例的状态传递给实体管理器管理的持久实体。 27.1.6 管理的实体实例 应用需要保证一个实例只在一个持久上下文中被管理。 contains方法可以用于确定一个实体实例是否被当前持久化上下文管理。 contains方法返回true的情况是: 实体已经被从数据库中检索到,并且还没有被删除和分离 实体实例是新建的,已经使用persiste方法,或者已经被级联到persist操作。 contains方法返回false的情况是: 实例是分离的。 对实体调用了remove方法,或者已经被级联了remove方法。 如果实例是新建的,还没有被调用persist方法或者没有级联的persist。 27.2获取EntityManagerFactory 应用通过EntityManagerFactory接口来获取实体管理器。 通常EntityManagerFactory与persistence.xml中的persistenceUnit对应。 实体管理工厂可以注入,也可以通过Persistence类获取。 27.2.1 通过注入获取实体管理器工厂 使用javax.persistence.PersistenceUnit元注释: name:在环境引用上下文中访问EntityManagerFactory所使用的名字,如果使用依赖注入,就不需要了。默认值是空字符串。 unitName:在persistence.xml中定义的持久单元的名字。 例如: @PersistenceUnit EntityManagerFactory emf; 27.2.2 通过Persistence类获取 通过调用javax.persistence.Persistence类的createEntityManagerFactory方法来创建实体管理器工厂。参数是持久单元的名字。 EntityManagerFactory emf = Persistence.createEntityManagerFactory(OrderEM ); 27.3 获取实体管理器 EntityManager接口定义了与持久上下文环境进行交互的方法。包括创建实体、删除实体、修改实体、根据主键查询实体以及使用Query对象查询实体的方法。 实体管理器的获取

文档评论(0)

wcc543543 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档