Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 会话与会话工厂之间的差异-休眠?_Hibernate_Session_Sessionfactory - Fatal编程技术网

Hibernate 会话与会话工厂之间的差异-休眠?

Hibernate 会话与会话工厂之间的差异-休眠?,hibernate,session,sessionfactory,Hibernate,Session,Sessionfactory,除以下内容外,我们还有其他差异吗?此外,请验证以下内容是否正确 SessionFactory对象为每个应用程序一个,Session对象为每个客户端一个 SessionFactory用于创建和管理会话会话是为 映射类,还可以访问更通用的标准API SessionFactory是线程安全的,而asSession不是线程安全的 首先,询问这些接口之间的区别没有任何意义。这似乎是在问汽车制造厂和汽车之间的区别。制造厂是生产汽车的地方。类似地,SessionFactory是一个实例,它将创建Session

除以下内容外,我们还有其他差异吗?此外,请验证以下内容是否正确

  • SessionFactory
    对象为每个应用程序一个,
    Session
    对象为每个客户端一个
  • SessionFactory
    用于创建和管理
    会话
    <代码>会话是为 映射类,还可以访问更通用的
    标准API
  • SessionFactory
    是线程安全的,而as
    Session
    不是线程安全的

  • 首先,询问这些接口之间的区别没有任何意义。这似乎是在问汽车制造厂和汽车之间的区别。制造厂是生产汽车的地方。类似地,
    SessionFactory
    是一个实例,它将创建
    Session
    对象

    SessionFactory
    是用于
    会话
    对象的工厂类。它可用于整个应用程序,而
    会话
    仅可用于特定事务


    Session
    是短期的,而
    SessionFactory
    对象是长期的
    SessionFactory
    提供二级缓存,
    Session
    提供一级缓存。

    SessionFactory是Hibernate关于单个数据存储的概念,是线程安全的,因此许多线程可以同时访问它,并为单个数据库请求会话和编译映射的不可变缓存


    不,会话不是线程安全的。会话是一个轻量级的非线程安全对象(不,您不能在线程之间共享它),它表示数据库的单个工作单元。会话由SessionFactory打开,然后在所有工作完成后关闭。会话是持久性服务的主要接口。会话以惰性方式(即仅在需要时)获取数据库连接。

    主要区别在于“每个hibernate客户端应用程序将只有一个会话工厂对象。因为SessionFactory接口的实现类是singleton Java类”。

    SessionFactory是一个接口。SessionFactory可以通过提供配置对象来创建,该对象将包含从hibernate.cfg.xml文件或hibernate.properties文件中提取的所有与数据库相关的属性详细信息。SessionFactory是会话对象的工厂

    我们可以在任何应用程序中为每个数据库创建一个SessionFactory实现。如果应用程序引用多个数据库,则需要为每个数据库创建一个SessionFactory

    SessionFactory是一个重量级对象;它通常在应用程序启动期间创建,并保留以供以后使用。SessionFactory是一个线程安全的对象,由应用程序的所有线程使用

    会话用于获取与数据库的物理连接。会话对象是轻量级的,设计为在每次需要与数据库进行交互时实例化。通过会话对象保存和检索持久对象


    会话对象不应该长时间保持打开状态,因为它们通常不是线程安全的,应该根据需要创建和销毁它们。会话的主要功能是为映射实体类的实例提供、创建、读取和删除操作。

    Sessionfactory

  • 它是每个数据源/数据库的一个实例
  • 它是线程安全的
  • 它是一个重量级对象,因为它维护数据源、映射、hibernate配置信息等
  • Sessionfactory将创建和管理会话
  • 如果有4个数据源/数据库,那么必须创建4个会话工厂实例
  • sessionfactory是一个不可变的对象,它将在服务器初始化自身时作为单例创建
  • 会话

  • 它是每个客户端/线程/一个事务的一个实例
  • 它不是线程安全的
  • 它很轻
  • 会话将使用sessionfactory.openSession()打开,一些数据库操作将完成。最后,会话将使用session.close()关闭

  • 会话工厂可以被认为是为特定数据源或数据库生成会话的工厂。换句话说,如果我们的应用程序有多个数据库,那么我们应该创建与数据库数量相同的会话工厂。因此,会话工厂是长期存在的


    会话是用于对数据库执行离散事务的短期实例。通常,在任何时候,如果需要使用数据库完成事务,则会从相应的会话工厂实例中获取一个短期会话对象,事务完成后,该实例将不再可用。

    那么在一个应用程序中最多可以创建多少个会话?我相信,您可以从同一会话工厂创建任意数量的会话…从工厂创建会话没有任何限制。只需在事务完成后关闭会话即可。因此,如果我在创建会话后销毁会话工厂,会话是否仍然有效?@Pere我对此不是很确定。但我猜会话可能会有效即使在工厂被摧毁后仍然活着。cos会话不是工厂的复合对象。是的,您几乎已经走上正轨。SessionFactory提供会话,您可以使用它与数据库交互。工厂是线程安全的,因为它的类是不可变的