OpenSessionInViewFilter模式有效。 在处理每个请求期间,这将打开一个Hibernate会话并将其绑定到您的线程。 OpenSessionInView还将Session和可加载性扩展到View渲染和View层,从而降低了耦合和复杂性(通过使其能够“正常工作”)。
我的观点与基于方面/声明式事务管理的观点并不完全相同。 我喜欢使主要的状态更改/生命周期事件“显式”,因为它们应该是绝对确定的-不应弱依赖于多个隐藏的和间接的层,这些层可能有效也可能无效。
它提供了调试点。
TX提交只是一行代码; 但这是您要断点的主要方法。 不再是句法上的,而是“交易性”声明; 但是地狱要明确得多。
坦率地说,我发现“用户命令”或“请求”是在其中发起事务和控制事务性的适当位置,应在应用程序内结构良好,标识清晰且相当明确。
(我确实很难使Aspect类加载工作正常运行,在它首次出现时就尝试了。我的评估是,与编写良好的OO代码相比,Aspect仅具有有限的边际价值。)
提示:我通常会创建一个帮助器类,以使获取Session和提交事务变得非常方便。
HbHelper之类的。