当前位置: 首页 > 知识库问答 >
问题:

使用哪种模式来打开和关闭hibernate会话(MyFaces 2 . 2 . 2 Spring 4 . 0 . 3 Hibernate 4 . 3 . 2)

魏泰
2023-03-14

我正在创建一个新项目,我对Spring冬眠管理有一些疑问。首先,我想说的是,我已经读了很多书,我试图记录自己,但几周后,我仍然对这个话题有点迷茫。

项目配置

>

  • 我的架构遵循以下结构:

    JSF豆-

    我的hibernate处理所有Dao,并与Spring完全集成。

    一切似乎都集成得很好,但我仍然找不到一个可靠的解决方案来管理Hibernate会话。

    我的第一种方法是使用JSF PhaseListeners使用OSIV,但后来我集成了Spring并开始在我的服务层上使用@Transactional注释。

    这是我的问题:

    >

  • 我认为每次调用@Transactional方法时,都会打开和关闭Hibernate会话,对吗?还是我错了?

    使用@Transactional,我肯定会遇到麻烦,因为Hibernate在Render响应阶段的Lazy实例化,我不想执行EAGER获取。所以

    使用 OSIV 是否安全?还是它真的容易受到DOS攻击?

    有没有比OSIV模式更好的方法来处理懒惰抓取问题?我肯定我错过了更好的模式,你能给这个话题一点启发吗?

    我没有发布任何代码,因为我所有的问题基本上都是关于架构的概念性问题,但如果你需要我的任何代码来理解我(我知道我对自己的解释很混乱),你只需要问我,我会尽快发布。

    谢谢大家!

  • 共有1个答案

    季森
    2023-03-14

    这是一个很大的问题,我不期望任何人一口气完全回答所有的问题。我会尽力回答问题1和问题2:

    1) 当在bean上调用带有@Transactional的方法时(即不直接在同一类中),Spring会检查现有事务并执行某些操作。这是由您的配置设置的(对于方法或bean,配置可能不同),请参阅事务传播。因此,您可以使用现有的、创建新的或根本不使用事务。

    2) 我发现在我的项目中,不急于抓取是一个问题。这当然是可能的,但IMHO很难维护,并且为错误增加了额外的空间。这个问题以前已经讨论过了(答案也是:可能的,但需要额外的工作,您应该根据您的具体情况权衡收益与努力):视图中的开放会话模式

     类似资料:
    • 我有下面的方法,每隔几秒钟插入一大批记录。运行一段时间后,我得到如下错误: 错误:通信链接失败 从服务器成功接收的最后一个数据包是523毫秒前。上次成功发送到服务器的数据包是8毫秒前。 May 16, 2013 9:48:30 AM com.mchange.v2.c3p0.stmt.GooGooStatementCache checkinStatement INFO: 签入语句问题,丢弃。 com

    • 我正在做一个项目,使用Hibernate进行持久化,使用Struts 2进行视图模式。 我的配置文件是: : < code > application context . XML : 我的问题是,在Struts 2的视图模式中,我无法保持Hibernate会话打开,这意味着当我尝试加载一些尚未用Hibernate初始化的数据(例如集合)时,我会得到<code>org.Hibernate。LazyI

    • 问题内容: 这些方法之间有什么区别,哪种更好?到现在为止,我的代码如下: 但是在运行上述代码时,记录并不总是被删除(精确地:id = 1永远不会被删除,而其他id总是被删除)。我读到保持打开的会话可以稍微加快应用程序的速度- 这就是为什么我要共享会话对象。我的业务对象通过DI获取会话工厂: 问题答案: 根据我在Hibernate的经验,得出的结论是,最好的策略是使Hibernate会话寿命与单个事

    • 有关您编写的代码问题的问题必须描述特定问题-并且在问题本身中包含有效代码以重现它。有关指导,请参阅SSCCE. org。 在我的应用程序中,我有一个模块,用于在数据库中搜索用户并在jsp内的表中显示他们的信息。我只是在应用程序中设置了Spring Security性。我能够从登录页面连接到数据库,尽管出于某种原因,DAO的CRUD操作(在本例中是搜索)都不起作用。 谢谢,如果我能提供更多信息,请告

    • 问题内容: 我需要一种从数据库中获取一些数据并防止用户在那一刻修改现有数据的方法。 我创建了一个SwingWorker来进行数据库更新,并创建了一个模态JDialog来向用户显示正在发生的事情(使用JProgressBar)。模态对话框的defaultCloseOperation设置为DO_NOTHING,因此只能通过适当的调用将其关闭- 我使用。 SwingWorker在doInBackgrou

    • 我是个初学者只是想找个更好的方法来解决问题 问题是,最佳实践是捕捉异常还是避免异常? 或