gpt4 book ai didi

java - OpenSessionInView 与 PersistenceContext(扩展)

转载 作者:搜寻专家 更新时间:2023-11-01 00:51:50 24 4
gpt4 key购买 nike

最近在做架构Hibernate/JPA/Spring/Zk,因为要学很多框架,所以这几天问题越来越多。

我有一个问题让我困惑了好几天。

我听说“模式”OpenSessionInView 使 Hibernate 事务保持 Activity 状态以进行延迟加载。许多人还说图案不是很干净。

另一方面,据说扩展的 PersistentContext 不是线程安全的,因此不适合让 entityManager 保持 Activity 状态。

那么,真正解决这些问题的办法是什么?我认为这些问题是由 ajax 的引入引起的,它允许更多的可能性,尤其是在必要时使用延迟加载来加载一些繁重的集合。

暂时,我在扩展模式下尝试了@PersistenceContext。它的工作...我必须为我的 JUnit 测试设置它,它在我的 Web 应用程序中也能正常工作,无需更多配置即可延迟加载。

框架的演变(Spring、JPA 2.0)是否意味着现在使用 PersistentContext 可以更轻松、更“干净”地工作?

如果不是这种情况,我们是否应该使用 Spring 的 OpenSessionInViewFilter 并替换事务模式下的 PersistentContext?

谢谢。

最佳答案

我听到了。自 2008 年以来,我已经在多个应用程序中实现了这两种模式。现在,我完全放弃了任何状态模式。当您向客户端引入状态时,您会提出可伸缩性和状态管理问题:您是否在客户端中合并,是否在用户 session 中保存,当您通过向导并且对象在保存之前必须是 transient 时会发生什么?您将如何同步客户端和服务器端状态?当数据库发生变化时会发生什么——客户端会中断吗?

看看现有技术的趋势,包括Spring MVC:模式是构建两个项目:1)restful webservices 2)用户界面。状态通过不可变的域模型共享。当然,您最终可能会维护一组 dto,但它们是可预测的、廉价的并且可以无限扩展。

我的建议?如果您想重用服务器端验证,请避免通过网络发送代理对象并在客户端处理 dtos 或与客户端共享域模型。可以通过 Ajax 通过细粒度的 api 调用加载惰性集合。这样,您就可以将完全控制权交给客户。

这就是社交网络在过去五年中的扩展方式。

关于java - OpenSessionInView 与 PersistenceContext(扩展),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11973145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com