gpt4 book ai didi

hibernate - 如何通过 Wicket JPA/Hibernate 集成(使用 Spring)摆脱 LazyInitializationException

转载 作者:行者123 更新时间:2023-12-04 11:17:25 26 4
gpt4 key购买 nike

我正在开发一个使用 Wicket 作为 View 层和 JPA(Hibernate) 作为 ORM 的应用程序。使用 Wicket 构建 UI 很有趣(即使使用 ajax)。我的问题来自在编辑页面上集成持久对象(使用 LoadadableDetachableModel 只读页面没有问题)。

我正在使用 spring 的 OSIV 过滤器为 View 提供开放 session 。但是,当我在编辑页面中保留域对象(@Entity 映射类)时,当我在 ajax 回调中访问它们的属性时,我会遇到可怕的延迟加载异常。

我真的不想走 DTO/VO 之路,因为我认为它只会使代码膨胀,并且需要我编写大量样板代码。

一种想法是在 View 中使用模型对象,将传入的对象与当前的 hibernate session 合并,并访问所有 getter 以完全初始化对象。在此之后,对象将存储在 View 中(seesion)并分离。保存后,我会重新合并它并提交更改。

这是推荐的方式吗?有更好的解决方案吗?奇怪的是,大多数书籍/博客/howtos 完全忽略了这样的问题。

你会建议什么交易管理?现在我在服务层使用@Transaction。如果我使用其他方式跨 hibernate session 访问存储数据,那会如何改变?

欢迎任何指针/链接,因为我在这里迷路了..

提前致谢

最佳答案

这篇博文(详细介绍了 LDM)给了我一些很好的见解,尤其是对于编辑场景:

Building a smart EntityModel

FWIW 我在 PerfBench 中使用自定义 RequestCycle(如上面链接的评论部分中所建议)获得了非常好的结果。你可以找到代码here . IIRC 这是 Bozho 发布的链接中方法 (OpenSessionInView/London Wicket) 的简化。

关于hibernate - 如何通过 Wicket JPA/Hibernate 集成(使用 Spring)摆脱 LazyInitializationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2085613/

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