Hibernate 核心模块(3.3)

发布者:    |      

很多人询问了Hibernate 3.3版本引入的新Hibernate核心模块:每个模块的作用、何时使用等。我想简要描述每个主要模块的作用以及何时如何使用某些组合。(这些模块还定义了Maven工件;所有Hibernate核心工件都使用org.hibernate组ID)。

模块

  • hibernate-core - 定义Hibernate的基本功能。预计该模块将在未来的版本中进一步拆分。
  • hibernate-jmx - 定义Hibernate与JMX服务器集成的功能。org.hibernate.jmx.HibernateService和org.hibernate.jmx.StatisticsService都定义在此模块中。
  • hibernate-ehcache - 定义使用EhCache作为Hibernate的第二级缓存的集成。
  • hibernate-jbosscache - 定义使用基于1.x版本的JBossCache作为Hibernate的第二级缓存的集成。应考虑过时此集成以支持基于新2.x版本的集成...
  • hibernate-jbosscache2 - 定义使用基于2.x版本的JBossCache作为Hibernate的第二级缓存的集成。
  • hibernate-oscache - 定义使用OSCache作为Hibernate的第二级缓存的集成。
  • hibernate-swarmcache - 定义使用SwarmCache作为Hibernate的第二级缓存的集成。
  • hibernate-c3p0 - 定义使用c3p0连接池作为Hibernate的ConnectionProvider的集成。
  • hibernate-proxool - 定义了将 proxool 连接池作为 Hibernate 的 ConnectionProvider 集成的功能。
  • hibernate-parent - 该模块作为所有 Hibernate 模块的父 pom。 用户通常不会使用也不需要了解此模块。 我在这里提一下,只是因为它可能对开发 Hibernate 扩展的人来说很有用。
  • hibernate-testing - 定义了 Hibernate 测试套件用于构建 SessionFactories 和管理 Sessions 的基本 基础设施。因为我认为用户也可能将其用于测试与 Hibernate 相关的代码,所以将其作为一个单独的模块。

还有其他模块,但上述模块是开发人员通常会需要的(其他包括 DocBook 源代码等)。

使用

使用 Javassist 和以 log4j 作为日志库的最小依赖设置如下

<dependencies>
    <!-- the dependency on the hibernate-core module (see above) -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>3.3.1.GA</version>
    </dependency>
    <!-- want to use Javassist as Hibernate's bytecode provider, so we depend on it here. -->
    <dependency>
        <groupId>javassist</groupId>
        <artifactId>javassist</artifactId>
        <version>3.4.GA</version>
    </dependency>
    <!-- Logging set up -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.5.2</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.14</version>
    </dependency>
</dependencies>

要使用 cglib 而不是 Javassist,我们将使用以下内容

<dependencies>
    <!-- the dependency on the hibernate-core module (see above) -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>3.3.1.GA</version>
    </dependency>
    <!-- Here we are using cglib instead of Javassist (Hibernate 'repackages' cglib to avoid name clashes) -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-cglib-repack</artifactId>
        <version>2.1_3</version>
    </dependency>
    <!-- Logging set up -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.5.2</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.14</version>
    </dependency>
</dependencies>

现在,让我们添加对 EhCache 的二级缓存支持

<dependencies>
    <!-- the dependency on the hibernate-core module (see above) -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>3.3.1.GA</version>
    </dependency>
    <!-- Here we are using cglib instead of Javassist (Hibernate 'repackages' cglib to avoid name clashes) -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-cglib-repack</artifactId>
        <version>2.1_3</version>
    </dependency>
    <!-- Logging set up -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.5.2</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.14</version>
    </dependency>
    <!-- Here is the bit enabling EhCache support -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-ehcache</artifactId>
        <version>3.3.1.GA</version>
    </dependency>
</dependencies>

正如我们上面所述,我们提到 hibernate-ehcache 模块定义了与 EhCache 的集成。它还定义了对 EhCache 本身的依赖关系,Maven 会将其拉入我们的依赖关系中 传递性地。有关此如何工作的信息,请参阅 Maven 文档。重点是,我们只需要依赖 hibernate-ehcache 模块,其他需要使用 EhCache 的依赖关系将由我们处理。


回到顶部