问题标签 [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.
hibernate - 回滚应该是一个例外吗?(特别是:在网络应用程序和 OSIV 中)
这是一个相当理论的问题:
在我的服务类中,如果由于任何原因无法执行操作,即使原因是错误输入或任何其他预期和检查的情况,我也倾向于始终进行回滚。
在使用 Open Session in View 模式 (OSIV) 的 Web 应用程序中,这具有令人讨厌的副作用,即会话关闭并且任何后续延迟加载操作都会失败。我必须编写丑陋的管道代码,以便仅在请求期间的某个时间点发生错误时在请求结束时回滚会话。
这让我开始思考:如果真的出了问题,回滚是否应该是一种特殊的措施?如果不满足条件,服务方法是否必须自己确保不写入/更改数据?输入验证成功但服务方法判定所选输入非法时,前端层更新模型对象(如表单)的情况如何处理?例如,当没有完成回滚时,Hibernate 会在默认配置中自动保留这些更改。
期待您的意见和建议!
java - 如何使 OpenSessionInViewFilter 排除静态资源
我已经为我的 MVC webapp 实现了 OpenSessionInViewFilter,它工作得几乎完美。唯一的问题是它还会为从网络服务器请求的每个图像、js、css 等创建一个会话。这是我不想要的。
我使用 struts2、spring 和 hibernate,这是我的 web.xml
所以因为我正在映射 url-pattern /* 它还需要所有图像等。我尝试将它设置为 *.jsp 和 *.action,但后来我又得到了延迟加载异常......我应该怎么做? 我已经寻找答案 5 个小时了,我的脑海里有点疯狂。
我需要做的就是让这个过滤器忽略所有静态资源。就是这样!对于其他一切它可以运行。听起来很简单,但真的很烦我,我不知道怎么做。
任何帮助将不胜感激。
我是否需要扩展过滤器来编写我自己的过滤器并在其中排除?如果是这样。如何?
编辑:似乎我可以在过滤器链的顶部为我的静态文件设置过滤器映射。然后将它们发送到“ByPassFilter”,从而绕过这些静态资源的过滤器链。这是要走的路吗??
多谢你们!
java - 使用 Spring 3 和 Hibernate 4 在 Open-Session-In-View 中实现注释驱动事务
我正在使用 Wicket-1.5.3、Spring-3.1.1 和 Hibernate-4.1.1 开发应用程序。
我要实施
- Open-Session-In-View 模式
- 事务将是注释驱动的,并且
- 应用程序应该得到任何 LazyInitializationException,还有
- 嵌套模型的数据库更新操作需要正确完成。
我有单独的层、网络、数据、服务等。
首先,我想说明 web.xml 中定义的 open-session-in-view 过滤器:
在 applicationContext.xml 我有以下配置:
*.hbm.xml 中定义的数据模型类是基于代理的:
现在我描述在 applicationConext 中定义的类:
userDao:其实就是UserDaoImpl:
BaseDaoImpl 是一个抽象类,其中 sessionFactory 的依赖注入实际发生:
在这里,我有一个关于这门课的问题。我想知道如果我用 HibernateDaoSupport 扩展 BaseDaoImpl 是否会更好?如果我这样做,那么保存方法的替代版本将是:
哪一个更好?
接下来是IBaseDao接口:
和 ISupportSave:
UserDaoImpl 实现了 IUserDao,它是:
接下来是服务层,在我描述的其他类中,userManager 是事务性的:
BaseManagerImpl 是一个由 UserManagerImpl 扩展的抽象类:
以下是 IBaseManager:
IUserManager 是:
我没有给模型课。主要是我有实现 IUser 并扩展 Base 的用户。IUser 依次扩展了 IBase 并且 Base 实现了 IBase。
现在我想知道上述设计是否正确,是否能满足我的要求。
任何建议都会对我很有帮助。
谢谢。
spring - 视图中的休眠打开会话:每个请求的事务?
我在 Tomcat 上使用 Hibernate 和 Spring。我一直在阅读和重新阅读经常指向该主题的JBoss wiki 页面,这很有帮助。但这给我留下了一些问题。
为每个请求启动事务的想法让我很困扰。我想我可以将过滤器限制为某些控制器——也许将我所有需要事务的控制器放在伪“tx”路径或其他东西下。但是,如果您不知道是否需要交易,那么使用交易不是一个坏主意吗?如果我只是在一些请求中进行读取——很可能来自缓存的读取——没有事务我不是更好吗?
我已经阅读了提到他们如何在服务层处理事务的帖子,我想用 Spring 来做这件事。但是过滤器代码是什么样的呢?我仍然希望会话在我的视图中可用以进行一些延迟加载。
如果我所要做的就是调用
sessionFactory.getCurrentSession()
我的过滤器,它如何“释放”回会话工厂以供重用?(即使在使用事务时,我也希望看到 asession.close()
或其他东西。)谁告诉会话工厂该会话可以重用?也许是
beginTransaction()
在请求期间将给定数据库连接绑定到给定会话的调用?否则,会话会根据需要从池中提取数据库连接,对吗?
感谢您对我所有问题的耐心等待。
(如果你的答案是指向 Spring 文档的链接,那你只会让我哭泣。你不希望这样,是吗?如果人们不再回答与 Spring 相关的问题,我会付真金白银的。方式。)
open-session-in-view - 视图模式中每个请求的会话与 Open Sesson 之间的区别
伙计们, Open Session in View和Session per request模式有什么区别?我正在使用 Spring MVC 和 Hibernate 。我不是在这里谈论事务分界,因为每个请求的 Session 似乎是 1 session:1 tx。但是对于 OSIV,有 1 个会话,然后有多个事务(每个服务调用 1 个)。有人可以对此有所了解吗?
java - Open Session in view for new version of Hibernate
I look at this, very popular page and see that it start with
So my question very easy: how to implement behavior like this in newest versions of hibernate (4.1+)? Maybe it exist more elegant decision of lazy initialization problem? Any advice and links are welcome.
spring - sessionFactory.getCurrentSession() 尽管配置了 OSIV,但返回不同的会话
我对Spring的OpenSessionInViewFilter有疑问。我的web.xml配置如下所示:
我的通用DAO看起来像这样:
公共类 BasicDaoImpl 实现 BasicDao {
( SessionFactory被注入)
我知道它不是为单个会话配置的(比如使用更新而不是合并),但首先我想摆脱LazyInitializationException。
我可以从调试中看到,每个请求上的sessionFactory.getCurrentSession()返回具有不同hashCode的会话
现在我做错了什么?
nhibernate - 如何在 Spring.NET/NHibernate 上默认保持 OpenSessionInView 仅使用无状态会话?
我们的项目只在遗留数据库上查询数据,当 Spring Framework 自动注入 OSIV 情况时,我们可以默认使用无状态会话吗?
我的意思是基类 NHibernateRepository 的方法 GetCurrentSession 可以检索无状态会话对象。
我将 _sessionFactory.GetCurrentSession() 更改为 _sessionFactory.OpenStatelessSession() 是否有效?
但我的 Spring 配置将保留为常规设置:
我应该为我的案子做些什么?谢谢你的帮助。
spring - 休眠。在jsp上获取惰性集合大小
我正在使用Spring MVC
withOpenSessionInViewFilter
并试图找到在 jsp 上获取惰性集合大小的最佳实践(不加载集合和LazyInitializationException
)。有什么解决办法吗?
spring - OpenSessionInView 的问题
我已经为延迟加载实现了 Spring/Hibernate 的 OpenSessionInView 模式。我面临“没有 Sessoon”或“2 个或更多会话”的问题。如果我遗漏任何步骤,请告诉我:
以下是详细代码片段:
Web.XML
应用程序上下文.xml
客户.xhtml
XHTML 用户界面具有显示客户代码的自动完成框。自动完成查询使用 CompleteCustomer 方法,而 getCustomerbyCode 由转换器 bean 调用。
选择客户代码后,屏幕将由选定的客户详细信息填充。允许应用程序用户进行更改并将更新保存在数据库中。
CustomerBean.java
CustomerServiceImpl.java
CustomerMasterDAO.java
表定义存储在 .hbm.xml 文件中。
我尝试了很多组合放置以下语句来获取会话: session = getSessionFactory().getCurrentSession(); 会话会话 = SessionFactoryUtils.getSession(sessionFactory, Boolean.FALSE);
也以不同的方式和不同的地点进行交易。我要么收到 No Session 的错误消息,要么收到两个或多个会话附加错误消息。
你能告诉我我的代码有什么问题吗?
问候,
希里什语