我正在开发一个使用 Wicket 作为视图层和 JPA(Hibernate) 作为 ORM 的应用程序。使用 Wicket 构建 UI 很有趣(即使使用 ajax)。我的问题来自于在编辑页面上集成持久对象(只读页面使用 LoadadableDetachableModel 没有问题)。
我正在使用 Spring 的 OSIV 过滤器为视图提供一个开放会话。但是,当我在编辑页面中保留域对象(@Entity 映射类)时,当我在 ajax 回调中访问它们的属性时,我得到了可怕的延迟加载异常。
我真的不想走 DTO / VO 道路,因为我认为它只会使代码膨胀并且需要我编写大量样板代码。
一种想法是使用视图中的模型对象,将传入的对象与当前的休眠会话合并,并访问所有 getter 以完全初始化对象。在此之后,对象将被存储在视图(seesion)中并被分离。保存后,我会重新合并它并提交更改。
这是推荐的方式吗?有更好的解决方案吗?奇怪的是,大多数书籍/博客/howtos 完全忽略了这个问题。
你会建议什么交易管理?现在我在服务层使用@Transaction。如果我使用其他方式访问跨休眠会话存储数据,那将如何改变?
欢迎任何指针/链接,因为我有点迷失在这里..
提前致谢