×

Loading...
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务

进来

本文发表在 rolia.net 枫下论坛这些东西可以从Hibernate的API里面找。

Hibernate SessionFactory大致可以对应一个数据库的connection pool, 一个session大致可以对应一个connection。具体的实现细节和定义你可以看源程序里面对应的SessionFactory/Session class,或者看看API文档也可以。

所以一个data source只需要一个Session Factory singleton就可以了,反复创建SessionFactory相当于反复创建connection pool,毫无意义。

具体到这个问题,看看Hibernate 提供的API: https://www.hibernate.org/hib_docs/v3/api/
找Configuration class的API。

得到一个SessionFactory的路径是config.configure().buildSessionFactory(), 实际上是Hibernate通过(默认)的配置文件和数据库建立连接并创建一个connection pool(废话)。注意得到的只是一个SessionFactory而已,这里似乎暗示Hibernate默认一个configuration里面只能有一个SessionFactory。这样做有道理,因为一个configuration对应一个数据库make sense。当然这些都是猜测,具体的我也不清楚,你看看Hibernate的Configuration class源程序,里面的SessionFactory是单个的instance,还是一个collection。如果是一个collection,那么如何reference里面的个别SessionFactory。看看源程序吧,里面都有。

同时注意API里面提供了另外一个method configure(URL url)。

那么,一种可行的解决方案就是创建两个configuration, config1.configure(URL).buildSessionFactory, config2.configure(URL2).buildSessionFactory, 这样你就可以得到两个connection pool了。把这两个sessionfactory扔到JNDI里面就是另外一回事了。更多精彩文章及讨论,请光临枫下论坛 rolia.net
Report

Replies, comments and Discussions:

  • 工作学习 / 学科技术讨论 / 这里有没有Hibernate大侠,问个简单的问题关于Hibernate, MySql在J2EE中的
    前提:一个J2EE Application, 包含一个Web project, 2个EJB projects(EJB P1, EJB P2), use Hibernate and MySql
    问题:能否把hibernate 的mapping 文件放在 EJB P2 project里面,然后在EJB P1里面用Hibernate session操作数据库(应用EJB P2里面的mapping 文件),事实上在EJB P2里面也用了Hibernate 来操作数据库,这样做是否可以,或者有什么潜在的bug.

    背景:因为我在测试过程中老是有问题,以前用db2,所有的hibernate mapping在EJB P1中,工作好好的。
    • hibernate mapping file 放在哪里无所谓把,关键你的hibernate session对于一个j2ee project只有一个,通过session factory 来管理
      • Session is a run-time concept and you usually have multiple sessions concurrently.
        • The application obtains Session instances from a SessionFactory. SessionFactory instances are not lightweight and typically one instance is created for the whole application. If the application accesses multiple databases, it needs one per database
          • 对,就是这个意思,如果有多个数据源,对每个数据源应该存在一个session factory,每种数据源的session factory对应整个project应该只有一个instance, 失业男,我说的对不对?
            • To accesss different datasources, you can specify multiple session factory elements in your.cfg.xml
            • 进来
              本文发表在 rolia.net 枫下论坛这些东西可以从Hibernate的API里面找。

              Hibernate SessionFactory大致可以对应一个数据库的connection pool, 一个session大致可以对应一个connection。具体的实现细节和定义你可以看源程序里面对应的SessionFactory/Session class,或者看看API文档也可以。

              所以一个data source只需要一个Session Factory singleton就可以了,反复创建SessionFactory相当于反复创建connection pool,毫无意义。

              具体到这个问题,看看Hibernate 提供的API: https://www.hibernate.org/hib_docs/v3/api/
              找Configuration class的API。

              得到一个SessionFactory的路径是config.configure().buildSessionFactory(), 实际上是Hibernate通过(默认)的配置文件和数据库建立连接并创建一个connection pool(废话)。注意得到的只是一个SessionFactory而已,这里似乎暗示Hibernate默认一个configuration里面只能有一个SessionFactory。这样做有道理,因为一个configuration对应一个数据库make sense。当然这些都是猜测,具体的我也不清楚,你看看Hibernate的Configuration class源程序,里面的SessionFactory是单个的instance,还是一个collection。如果是一个collection,那么如何reference里面的个别SessionFactory。看看源程序吧,里面都有。

              同时注意API里面提供了另外一个method configure(URL url)。

              那么,一种可行的解决方案就是创建两个configuration, config1.configure(URL).buildSessionFactory, config2.configure(URL2).buildSessionFactory, 这样你就可以得到两个connection pool了。把这两个sessionfactory扔到JNDI里面就是另外一回事了。更多精彩文章及讨论,请光临枫下论坛 rolia.net
              • 在他的项目估计要使用JNDI了。
    • 你说的project是什么概念?如果最后deploy到一个ear里,你怎么分project都没关系。