返回介绍

配置 Hibernate

发布于 2025-04-21 21:42:11 字数 4992 浏览 0 评论 0 收藏

在我们继续学习 Hibernate 的使用之前,我们需要解决某些妨碍继续前进的问题。在上一章中,我们使用 src 目录下的 hibernate.properties 文件来配置 Hibernate 的 JDBC 连接。在这一章中,我们将使用 Hibernate XML 配置文件来配置 JDBC 连接、SQL 方言等各种 Hibernate 设置。与 hibernate.properties 文件一样,我们也把这个 XML 配置文件放在 src 目录中。将例 3-1 的内容输入到一个名为 hibernate.cfg.xml 的文件中,并将其保存在 src 目录下,再删除原来的 hibernate.properties 文件。

例 3-1:用 XML 配置 Hibernate:hibernate.cfg.xml

<?xml version="1.0"encoding="utf-8"?>

<!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory>

<!--SQL dialect-->

<property name="dialect">org.hibernate.dialect.HSQLDialect</property>❶

<!--Database connection settings-->❷

<property name="connection.driver_class">org.hsqldb.jdbcDriver</property>

<property name="connection.url">jdbc:hsqldb:data/music</property>

<property name="connection.username">sa</property>

<property name="connection.password"></property>

<property name="connection.shutdown">true</property>

<!--JDBC connection pool(use the built-in one)-->

<property name="connection.pool_size">1</property>❸

<!--Enable Hibernate's automatic session context management-->

<property name="current_session_context_class">thread</property>

<!--Disable the second-level cache-->❹

<property

name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

<!--disable batching so HSQLDB will propagate errors correctly.-->

<property name="jdbc.batch_size">0</property>❺

<!--Echo all executed SQL to stdout-->

<property name="show_sql">true</property>❻

<!--List all the mapping documents we're using-->❼

<mapping resource="com/oreilly/hh/data/Track.hbm.xml"/>

</session-factory>

</hibernate-configuration>

从示例中可以看到,hibernate.cfg.xml 配置了 SQL 方言、JDBC 参数、连接池(connection pool)以及缓存提供者(cache provider)。这个 XML 文档还引用了我们在上一章写的映射文档,这样就不需要我们再从 Java 源代码中引用这些映射文档了。稍后将详细介绍这一配置文件的细节:

❶就像第 2 章的 hibernate.properties 文件一样,我们在这一行是为使用 HSQLDB 而定义它的 SQL 方言。你可能已经注意到 property 元素的 name 属性是 dialect,类似于.properties 文件中的属性的名称(也就是 hibernate.dialect)。当使用 XML 配置文件来配置 Hibernate 时,其实也是在向 Hibernate 传递了同样的属性。在 XML 配置文件中,可以省略属性名称的 hibernate.前缀。这一区段(dialect)和下一区段(connection)的配置方法与我们在第 2 章 hibernate.properties 文件中的配置是一样的。

❷用于配置 Hibernate 内部的 JDBC 连接的属性(connection.driver_class、connection.url、connection.username、connection.password 以及 connection.shutdown)与例 2-4 的 hibernate.properties 中的属性集也一一对应。

❸将 connection.pool_size 属性设置为 1。这意味着 Hibernate 将创建一个只保持一个连接的 JDBC Connection(连接)池。数据库连接池对于需要达到一定规模的大型应用程序来说很重要,不过就本书的目的来说,我们可以放心地将 Hibernate 配置为使用只有一个 JDBC 连接的内建连接池。在连接池实现上,Hibernate 支持很大的灵活性,可以非常容易地配置 Hibernate 来使用其他的连接池实现,例如 Apache Commons DBCP 和 C3P0。

❹照目前情况,当 Hibernate 执行实际的持久化操作时,它就会警告我们还没有配置它的二级缓存系统。对于像这样的简单应用程序来说,我们根本不需要二级缓存;所以这一行配置就是要关闭二级缓存,将每个操作立即发送到数据库。

❺这里,我们是在关闭 Hibernate 的 JDBC 批处理功能。虽然这样做会稍微降低一点效率(对于像 HSQLDB 这样的内存数据库的影响微乎其微),不过为了获取当前 HSQLDB 触发的错误报告,有必要这样做。当打开批处理模式时,如果批处理中有任何语句出了问题,从 HSQLDB 中得到的惟一异常将只是 BatchUpdateException,告诉你批处理失败。这样错误报告对调试程序几乎没有什么用。HSQLDB 的作者说这个问题将在下一个主要发行版本中得以修复;在此之前,当使用 HSQLDB 时,为了明白问题的来龙去脉,我们就先不使用批处理模式。

❻how_sql 属性是一个在开发和调试 Hibernate 程序时使用的属性。将 show_sql 设置为 true,就告诉 Hibernate 要它打印输出对数据库操作时执行的每条语句。如果你不希望在控制台看到打印输出的 SQL 语句,可以将这个属性设置为 false。

❼最后一部分列出了在我们的项目中使用的所有映射文档。注意,路径中包含的斜杠字符(“/”)是相对于 src 目录的。这一路径指明了.hbm.xml 文件作为资源在类路径上的位置。通过在这里列出这些文件,我们就不用在处理映射类的 build.xml 构建目标中显式说明如何找到它们(稍后可以看到),也不需要像本书的旧版那样在每个例子源代码的 main()方法中加载这些映射文档。把所有映射文档集中在一起是个不错的做法。

除了 src 目录下的 hibernate.cfg.xml 文件,还需要修改 build.xml 以引用这个新的 XML 配置文件。修改 codegen 和 schema 构建目标内的 configuration 元素,如例 3-2 中用粗体显示的几行所示。例 3-2:修改 build.xml,以使用新的 Hibernate XML 配置文件

……

<!--Generate the java code for all mapping files in our source tree-->

<target name="codegen"depends="prepare"

description="Generate Java source from the O/R mapping files">

<hibernatetool destdir="${source.root}">

<configuration configurationfile="${source.root}/hibernate.cfg.xml"/>

<hbm2java/>

</hibernatetool>

</target>

……

<!--Generate the schemas for all mapping files in our class tree-->

<target name="schema"depends="prepare"

description="Generate DB schema from the O/R mapping files">

<hibernatetool destdir="${source.root}">

<configuration configurationfile="${source.root}/hibernate.cfg.xml"/>

<hbm2ddl drop="yes"/>

</hibernatetool>

</target>

……

这两行告诉 Hibernate Tools Ant 构建任务,到哪里查找 Hibernate XML 配置文件,这样,Ant 任务就可以在这个配置文件中找到它们需要的所有信息(包括正在处理的映射文档;回想一下第 2 章的做法,我们不得不在 configuration 元素中显式构建了 Ant 的 fileset 元素,以匹配项目源代码树中的所有映射文件)。从现在起,本书的剩余部分将全部使用 Hibernate XML 配置文件,这样可以更方便地为 Hibernate 的相关工具传递各种需要的信息。

现在我们已经成功地配置好了 Hibernate,下面我们就回到本章的主要任务:生成持久化对象。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。