【问题标题】:Web application request filterWeb 应用程序请求过滤器
【发布时间】:2011-04-07 06:22:40
【问题描述】:

我正在将 Turbine 2.3.2 与 Hibernate 3 一起使用。我的问题是当我的 (Velocity 1.6.4) 模板执行时,Hibernate 会话不活动,并且我正在从数据库中访问 Hibernate 需要延迟初始化的数据.因此我得到一个 LazyInitializationException - 没有会话错误。

由于我希望我的 Hibernate 会话在速度模板执行时处于活动状态,因此我希望在 Velocity 模板之后和之前执行一个类。这样我就可以在一个地方打开和关闭我的 Hibernate 会话。 (在 Hibernate 中禁用延迟初始化对我来说不是一个选项)。是否有任何与 Turbine 相关的可能性来编写一种侦听器或过滤器(我不确定如何调用它)在 Velocity 模板执行之前和之后执行?或者也许 servlet 容器可以过滤请求......你会推荐什么选项?

【问题讨论】:

    标签: java hibernate turbine


    【解决方案1】:

    尝试查看 Spring OpenSessionInViewFilter。它打开 Hibernate Session 并将其分配给 threadlocal。这样,您就可以在数据访问层中提取并使用它。

    【讨论】:

      【解决方案2】:

      您的问题似乎与著名的 Open Session In View (OSIV) 模式有关。 查看 JBoss wiki 上的 Open Session in View 页面,您会发现一个基于过滤器的实现(非基于 Spring)。

      【讨论】:

        【解决方案3】:

        在视图中打开会话不是一个干净的解决方案。您可以在您的条件中配置(如果您使用它)Hibernate 必须急切获取的关联路径。 如果您使用 HQL,只需在会话仍处于打开状态时“触摸”关联。

        【讨论】:

        • 使用此解决方案,我必须配置出现此问题的每个对象。那将是很多对象,所以我不会这样做。我已经说过禁用延迟初始化(即使它涉及“仅”几个对象)不是一种选择。
        猜你喜欢
        • 2012-05-14
        • 1970-01-01
        • 2016-08-30
        • 1970-01-01
        • 2014-01-24
        • 1970-01-01
        • 1970-01-01
        • 2011-01-07
        • 1970-01-01
        相关资源
        最近更新 更多