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

在给定的应用程序中调用crud操作时,SessionFactory在内部做什么?

吕宇定
2023-03-14

我了解SpringHibernateJava集成。所以我对以下给定的要点有了清晰的了解:

>

  • Spring使用LocalSessionFactoryBean类创建SessionWorks,它是Hibernate类。
  • 应用程序上下文加载数据源、Hibernate属性等的定义。
  • 我们可以在Spring道类中注入会话工厂类。我的问题是关于粗糙操作调用,比如

    sessionfactory.get(--, -)

    它如何在内部使用数据源或任何其他spring/hibernate相关资源?

  • 共有1个答案

    奚和光
    2023-03-14

    我试图在高层解释发生了什么,有关更多细节,请查看源代码。

    首先,在您的代码行中调用了2个方法:

    • getCurrrent会话()在会话工厂
    • 在返回的会话中获取(--,--)

    在第一种方法中,Hibernate使用 CurrentSessionContext 来检索 acual 会话。CurrentSessionContext 实现实质上会查看是否存在与您的线程和会话属性相关的打开事务的打开会话并返回它;为了更简单起见,如果您在此线程中的此数据库上执行某些操作并允许您继续,则会消失。如果 CurrentSessionContext 找不到会话,则会创建一个新会话。(请注意,默认情况下使用许多 CurrentSessionContext 的实现 JPA 一个)

    在检索会话之后,执行第二个方法。在引用方言和其他对象的第二个方法中,生成了一个本地sql查询。在您的特定情况下,sql通过会话发送到数据库,步骤如下:

    • 如果会话未绑定到连接,请从池中请求db连接
    • 通过连接发送sql并检索结果集
    • 获取结果集并将其传递到将返回的实体对象

    如果您正在执行dml操作(更新、插入…),则sql将存储在会话中,并将在刷新会话后发送(您可以使用flush()方法,否则只需提交并等待hibernate执行)。重要注意,提交事务意味着代码将在数据库上执行。提交后,hibernate将通过自己的时间通过数据库连接打开一个事务(重要的hibernate transactionon不是一个数据库事务)。它将执行所有生成的sql语句并提交数据库事务。这是刷新操作,请记住,您不知道何时发生刷新,因为您不使用flush()方法手动强制执行。

    希望这个赫普尔·

     类似资料:
    • 另外,为什么在键入Style标记的name属性时执行Ctrl+Space操作时看不到所有的r.attr元素? 请帮忙。谢了。

    • 在PHP CRUD应用程序中实现撤消功能的最佳方法是什么?我能想出的唯一解决方案是在我的数据库中使用一种定期擦除的缓冲区表。 例如,如果用户在删除一条记录后单击“撤消”按钮,最后一次更改的id将被传递给一个处理程序,该处理程序将拉出缓冲区记录并将其恢复到该数据类型的主表中。如果“撤消”在4或5分钟内没有完成,收割者脚本将删除该条目。 这听起来可行吗?有没有更好的方法来完成这件事?

    • 我试图调用ViewModel中片段中的函数,但每次调用时它都会崩溃,我不知道为什么。下面是代码: 呼吁协程: 函数的代码: 如果我不使用协同程序,只使用我收到一个错误,说我必须从其他挂起函数或协同程序调用这个函数。 这就是错误: 我的ViewModel是: 在我称之为协程的片段中,我这样声明它:

    • 本文向大家介绍使用Python在给定时间内工作的程序员数量,包括了使用Python在给定时间内工作的程序员数量的使用技巧和注意事项,需要的朋友参考一下 假设我们有间隔列表和另一个输入时间。在每个时间间隔中,结构都是[start,end],它表示程序员工作的时间。我们必须找到当时正在工作的程序员数量。 因此,如果输入像interval = [[2,6],[4,10],[5,9],[11,14]],t

    • 当我创建一个简单的非多线程JavaFX应用程序并启动它时,该应用程序会创建一些线程(JavaFXApplicationThread、JavaFXLauncher等)。这些线程中的大多数都已命名,但在我的所有JavaFX应用程序中都有一个未命名的线程(“线程-1”或“线程-2”)。我绝对不会创建自己的线程,因为我尝试启动Hello World JavaFX应用程序(由IDEA生成),其中也包含“线程

    • 问题内容: 我正在尝试制作一个第三方的简单的独立/摇摆应用程序,该应用程序使用hibernate模式在另一个应用程序的数据库上进行连接,所以这是我所做的: 1-使用的jar: 2- hibernate.cfg.xml(位于src文件夹中): 3- SessionFactoryHelper: 4-样本查询: 运行该应用程序时,出现以下异常: 谁能告诉我我的配置出了什么问题? 问题答案: 这个问题与H