java – JPA:扩展持久性上下文和分离实体

似乎有两种模式来实现跨越多个http请求与JPA的业务事务:

>具有分离实体的实体管理器每请求
>扩展的持久性上下文

这些模式的各自优点是什么?什么时候应该是首选?

到目前为止,我想出了:

>扩展的持久性上下文保证对象标识等同于数据库标识,简化编程模型,并潜在地破坏实现实体的等同性的需要
分离的实体比扩展持久性上下文需要更少的内存,因为持久性上下文还必须存储用于更改检测的实体的先前状态
>不再引用分离的实体有资格进行垃圾收集;必须首先明确分离持久对象

但是,没有JPA的实践经验,我相信我错过了一些重要的事情,所以这个问题.

如果重要:我们打算使用由Hibernate 3.6支持的JPA 2.0.

编辑:我们的视图技术是JSF 2.0,在一个EJB 3.1容器中,具有CDI和可能的Seam 3.

解决方法

那么我可以通过尝试在Web环境中使用扩展的持久性上下文来枚举挑战.有些事情也取决于你的观点技术是什么,如果它是绑定实体或视图级中间人.

>实体管理器不是线程安全的.
每个用户会话不需要一个.
每个用户会话需要一个
浏览器标签.
>当一个异常出来的时候
EntityManager,它被考虑
无效并需要关闭
更换.如果你打算
编写自己的框架扩展
为了管理延长的生命周期,
这需要实施
有防弹一般在
EM-per-request设置异常
去一些错误页面
然后加载下一页创建一个
不管怎么说,总是会这样的
有.
>对象的平等不会是
100%自动安全.如上,
一个例外可能无效
上下文一个加载的对象
被关联,所以一个
现在不会平等做到这一点
假设也假设非常
高水平的技能和
了解JPA的工作原理和
什么是EM
开发者使用它.例如.,
意外地使用合并时
不需要会返回一个新的
不满足==的对象
其领域相同
前任. (治疗合并一样
sql’update’是非常常见的
JPA noobie’error’特别
因为它只是一个不起作用的大部分
那么它滑过去的时间.)
>如果您使用视图技术
其结合POJO(例如SpringMVC)
你打算绑定网络表单
数据直接发送到您的实体,
你会很快遇到麻烦.
对附加实体的更改将会
在下一个持续下去
flush / commit,不管是否
他们在交易中完成
不.常见的错误是,web表单
进入并绑定一些无效数据
一个实体上,验证失败
trys返回屏幕通知
用户.建筑错误屏幕
涉及运行查询.询问
触发刷新/提交持久性
上下文.更改绑定到附件
实体被刷新到数据库,
希望引起sql异常,但是
也许只是坚持腐败的数据.

(当然,如果编程很匆忙,问题4当然也会发生在会话中,但你不会被迫积极地努力避免.)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


应用场景 C端用户提交工单、工单创建完成之后、会发布一条工单创建完成的消息事件(异步消息)、MQ消费者收到消息之后、会通知各处理器处理该消息、各处理器处理完后都会发布一条将该工单写入搜索引擎的消息、最终该工单出现在搜索引擎、被工单处理人检索和处理。 事故异常体现 1、异常体现 从工单的流转记录发现、
线程类,设置有一个公共资源 package cn.org.chris.concurrent; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * @Descrip
Java中的数字(带有0前缀和字符串)
在Java 9中使用JLink的目的是什么?
Java Stream API Filter(过滤器)
在Java中找到正数和负数数组元素的数量
Java 9中JShell中的不同启动脚本是什么?
使用Java的位填充错误检测技术
java中string是什么
如何使用Java中的JSON-lib API将Map转换为JSON对象?
Java菜单驱动程序以检查数字类型
使用Junit的Maven项目 - 检查银行账号
JAVA编程基础
在Java中使用throw、catch和instanceof来处理异常
在Java中,将数组分割为基于给定查询的子数组后,找到子数组的最大子数组和
如何在Java中从给定的字符串中删除HTML标签?
在PHP中,IntlChar getBlockCode()函数的翻译如下:
如何在Android中实现按下返回键再次退出的功能?
如何使用Java中的流式API解析JSON字符串?
Java中的模式类