问题标签 [open-session-in-view]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2527 浏览

java - 在视图中打开会话与@Transactional

我一直@Transactional在我的服务层中使用注释。但是要解决由于视图中延迟加载导致的错误,我必须使用Open Session in View Filter. 在此之后,不使用 @Transaction 本身就会打开一个 Session 并开始事务。那么这是否意味着不需要@Transactions?那么在服务层中如何处理事务和回滚呢?

0 投票
1 回答
109 浏览

java - View Merge 中的 Java Hibernate 会话丢失更改?

我有一个 Hibernate APP,我们正在尝试Open Session in View Pattern用 ZK 实现我有一个问题 Hibernate 为每个线程创建一个会话并关闭它,但是我们在一个会话中使用 [标准和保存或更新] 方法进行了多次操作,我们开始使用更新方法实现我们很快就收到了臭名昭著的

如果以下内容,我们已更改update()merge()我的问题。

如果我有一Student堂课并尝试使用update[making sure is not in session avoid the exception]但后来在其他方法中更新学生,则要求学生再次更新,与以前不同,这次update我们应该调用方法。我想知道什么时候调用方法对第一个学生的更改是损失?两个学生的变化都可以吗?发生什么了??mergingmerge()[flush][commit]

恐怕首先student是损失的变化!在这种情况下我该怎么办?

非常感谢。

0 投票
1 回答
154 浏览

java - 视图中的 Java Hibernate OpenSession 避免在控制器上获取

我们最近在 Hibernate 中有一个 APP 我们开始在 DAO 中使用 Open Session in View 我们获取我们真正需要的数据.. 我们不关闭会话但稍后在我们的控制器中对实体 Hibernate 的任何操作都从数据库中获取数据我知道这种行为是使用开放会话的主要原因,但在某些情况下我不需要获取。我想知道我是否可以告诉休眠在某些情况下不获取数据....

学生.getSchool().getTeachers()

在这种情况下,我已经从这 3 个实体加载了我需要的所有数据,但是休眠开始再次加载学校和教师。

多谢

0 投票
1 回答
377 浏览

hibernate - 使用 servlet 过滤器在视图模式中打开会话时使用 log4j 记录休眠查询

首先感谢您花时间阅读我的问题。

我将从我的环境开始: Primefaces 3.5 Hibernate 4.3.2 Glassfish 3.1.2

我的问题是:我想记录使用 log4j 的 sql 查询 hibernate (以及绑定到这些查询的参数)。在我决定实施Open Session in View模式之前,日志记录一直有效。现在日志只包含来自此过滤器的信息(如“启动数据库事务”等)。

我的 log4j.xml 看起来像这样:

来自 hibernate 的 trace、info 和其他信息不会打印在任何地方。

谢谢您的帮助,

安德烈

0 投票
1 回答
1276 浏览

spring - Hibernate 4 + Spring 3,无插入或更新

为了解决 Hibernate 错误HHH-2763,我正在尝试将我的应用程序从 Hibernate 3 更新到 Hibernate 4。它似乎进展顺利,直到我意识到虽然我的应用程序可以读取数据,但它似乎永远不会插入或更新。我打开了 SQL 日志记录:在 Hibernate 3 下,有插入和更新。在 Hibernate 4 下,没有插入和更新。

我们在 Hibernate 3 中通过覆盖 OpenSessionInViewFilter 类的closeSession方法进行显式刷新,如下所示:

但是在 Hibernate 4 中,这不再是一个选项,因为该方法不再存在。

我的会话工厂和事务管理器的 Hibernate 4 配置如下:

(编辑) 这是配置OpenSessionInViewFilter

我的猜测是它不是冲洗和提交。但为什么?

0 投票
1 回答
1205 浏览

java - OpenSessionInViewFilter 找不到 WebApplicationContext

我知道配置 OSIVF 是一个常见的痛点。我已经阅读了过去几天我能找到的所有页面,但似乎没有什么能让我解决这个问题。我已经成功地让自己感到困惑,尽管如此。我试图保持这个配置非常简单,因为网络应用程序非常简单。好吧,这是错误:

这是 web.xml:

最后,这里有一些来自 onepic-servlet.xml 的内容:

再次,我很抱歉再次提出这样一个常见问题,但我一定错过了一些将这一切联系在一起的知识。

0 投票
1 回答
1689 浏览

spring - 使用 Spring Hibernate Application 配置 OpenSessionInView 过滤器

我正在开发一个 Spring Hibernate Web 应用程序

早些时候,我只使用 dispatcher-servlet.xml 加载 Spring 配置,而不使用 ContextLoaderListener,但是当我实现 OpenSessionInView 模式时,我必须在 web.xml 中提供一个 ContextLoaderListener 并创建一个新的 applicationContext.xml 并从 dispatcher- 中移动休眠配置servlet.xml 到 applicationContext.xml。

我对这种变化有些怀疑。

下面是运行良好的代码。web.xml

调度程序-servlet.xml

应用程序上下文.xml

A. 谁能告诉我创建新的 applicationContext.xml 并将休眠代码移至其中的原因?为什么不把代码放在 dispatcher-servlet.xml 中呢?

B. 要在 Spring 中使用过滤器,我们需要一个 ContextLoaderListener,没有它过滤器就不能工作吗?

0 投票
2 回答
860 浏览

java - 使用 OpenSessionInView 过滤器在休眠状态下更新对象

我正在尝试在休眠中更新一个对象,但我不明白为什么它没有在数据库中更新。有人可以帮忙吗?

控制器类

DAO 类

我正在尝试更新所有者的城市,但我没有更新。这是我在控制台中得到的。在 editOwner 方法中,我得到了所有者的城市,因此我相信该值已正确传递。这与方法有关。我尝试了更新、合并、保存或更新,但似乎没有任何效果。

DAO 类的代码

web.xml

调度程序-servlet.xml

应用程序上下文.xml

0 投票
2 回答
1965 浏览

spring-mvc - 是否可以在 Spring 应用程序上下文中配置 OpenSessionInViewFilter 以便 context:property-placeholder 可用?

初始情况

我的 Web 应用程序由 Maven 模块myapp-persistence (.jar)、myapp-model (.jar)、myapp-service (.jar) 和myapp-web (.war) 组成,以获得传统的、松散耦合的、多层的建筑学。所有模块都由一个父 Maven 模块连接在一起,该模块仅包含父POM以及所有子模块的通用定义。

特别是myapp-service (.jar) 和myapp-persistence (.jar) 拥有自己的可配置 (!) 应用程序上下文部分以及所需的对象。两个 jar 必须可以使用包含的变量定义进行部署,换句话说,这些 jar 不能具有变量的具体值。

myapp-service-context.xml使用服务器 URL 的变量声明一个solrServer bean:

myapp-persistence-context.xml定义了一个带有连接变量的数据源:

myapp-web (.war) 引用myapp-service (.jar) 和myapp-persistence (.jar)。在myapp-servlet.xml中,它包括它们的应用程序上下文部分,并为通过属性文件声明的 bean 的配置提供属性值。通过context:property-placeholder Spring 在内存中创建应用程序上下文时使用具体值初始化所有变量。

对于开发配置文件,具体的myapp-configuration.properties可能如下所示:

这种配置是 imo 直截了当的并且可以工作 - 没有视图。当org.springframework.orm.hibernate3.support.OpenSessionInViewFilter发挥作用时,问题就出现了。

问题描述

OpenSessionInViewFilter确保在控制器处理期间未在打开的事务中加载的对象图中的实例可以延迟加载,如果视图试图显示这些对象的内容(参见[1])。正如经常描述的那样,这个过滤器是在 delpoyment 描述符web.xml中声明的(参见[2]):

如果myapp-persistence-context.xml像上面那样包含在myapp-servlet.xml中,以便context:property-placeholder起作用,则OpenSessionInViewFilter找不到必要的sessionFactory。原因似乎是 Spring 首先处理web.xml,然后是myapp-servlet.xml,它导入了myapp-persistence-context.xml。不幸的是,我无法通过参考来证明这个猜测。抛出以下异常:

不同的应用程序上下文部分通常包含在带有ContextLoaderListener的部署描述符中,而不是myapp-servlet.xml 中

不幸的是,有了这种配置,Spring 的context:property-placeholder机制似乎不再起作用了。

目标和问题

myapp-persistence (.jar) 和myapp-service (.jar) 这样的模块必须在运行时通过引用上下文使用属性文件进行配置,例如myapp-web (.war) 的应用程序上下文。

问题是:是否可以在 Spring 应用程序上下文中配置OpenSessionInViewFilter以便context:property-placeholder仍然可用?

或者:如果应用程序上下文部分包含在部署描述符web.xml中,Spring 如何在运行时初始化应用程序上下文中的变量?

从根本上说:为什么实际上必须配置OpenSessionInViewFilter ,为什么 Spring MVC 不透明地支持开箱即用的视图延迟加载?

预期的评论

编译时的属性替换不是重点。已使用 Maven 过滤创建了配置文件相关属性文件。

dataSourcesolrServer声明移动到已经提出的 myapp-servlet.xml中(参见[3][4])不是一个可接受的解决方案,因为它破坏了myapp-persistence (.jar) 和myapp-service的模块化和独立可测试性( .jar) - 实际上是依赖注入的精神!

0 投票
1 回答
2512 浏览

spring - Spring 集成测试问题:无法初始化代理 - 没有通过引用链的会话:

我正在尝试测试控制器方法,但我遇到了一个可能与延迟加载有关的问题,因此我试图在视图过滤器中为我的测试设置一个开放的实体管理器。

设置方法:

测试方法:

对象映射器:

异常堆栈跟踪:

似乎 Spring Mvc Test 忽略了第二个过滤器,我仍然收到休眠错误...有人可以帮忙吗?