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

前端之家收集整理的这篇文章主要介绍了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当然也会发生在会话中,但你不会被迫积极地努力避免.)

原文链接:https://www.f2er.com/java/126106.html

猜你在找的Java相关文章