id元素是标识属性(identifer property)的声明, name="id" 声明了Java属性(property)的名字 -
Hibernate将使用getId()和setId()来访问它。 字段参数(column attribute)则告诉Hibernate我们使
用EVENTS表的哪个字段作为主键。 嵌套的generator元素指定了标识符的生成策略 - 在这里我们使
用increment,这个是非常简单的在内存中直接生成数字的方法,多数用于测试(或教程)中。 Hibernate
同时也支持使用数据库生成(database generated),全局唯一性(globally unique)和应用程序指定
(application assigned) (或者你自己为任何已有策略所写的扩展) 这些方式来生成标识符。
最后我们还必须在映射文件里面包括需要持久化属性的声明。缺省的情况下,类里面的属性都被视为非持
久化的:
和id元素类似,property元素的name参数 告诉Hibernate使用哪个getter和setter方法。
为什么date属性的映射包括column参数,但是title却没有? 当没有设定column参数的时候,Hibernate缺
省使用属性名作为字段(column)名。对于title,这样工作得很好。 然而,date在多数的数据库里,是
一个保留关键字,所以我们最好把它映射成另外一个名字。
下一件有趣的事情是title属性缺少一个type参数。 我们声明并使用在映射文件里面的type,并不像我们假
想的那样,是Java data type, 同时也不是SQL database type。这些类型被称作Hibernate mapping
types, 它们把数据类型从Java转换到SQL data types。如果映射的参数没有设置的话,Hibernate也将尝
试去确定正确的类型转换和它的映射类型。 在某些情况下这个自动检测(在Java class上使用反射机制)
不会产生你所期待或者 需要的缺省值。这里有个例子是关于date属性。Hibernate无法知道这个属性应该被
映射成下面这些类型中的哪一个: SQLdate,timestamp,time。 我们通过声明属性映射timestamp来表
示我们希望保存所有的关于日期和时间的信息。
这个映射文件(mapping file)应该被保存为Event.hbm.xml,和我们的EventJava 源文件放在同一个目录
下。映射文件的名字可以是任意的,然而hbm.xml已经成为Hibernate开发者社区的习惯性约定。 现在目录
应该看起来像这样:
.
+lib
+src
Event.java
Event.hbm.xml
我们继续进行Hibernate的主要配置。
2.2.3. Hibernate配置
我们现在已经有了一个持久化类和它的映射文件,是时候配置Hibernate了。在我们做这个之前,我们需要
一个数据库。 HSQL DB,一个java-based内嵌式SQL数据库(in-memory SQL Database),可以从
HSQL DB的网站上下载。 实际上,你仅仅需要下载/lib/目录中的hsqldb.jar。把这个文件放在开发文件夹
的lib/目录里面。
在开发目录下面创建一个叫做data的目录 - 这个是HSQL DB存储它的数据文件的地方。
Hibernate是你的程序里连接数据库的那个应用层,所以它需要连接用的信息。连接(connection)是通过
一个也由我们配置的JDBC连接池(connection pool)。 Hibernate的分发版里面包括了一些open source
的连接池,但是我们已经决定在这个教程里面使用内嵌式连接池。 如果你希望使用一个产品级的第三方连
接池软件,你必须拷贝所需的库文件去你的classpath并使用不同的连接池设置。
为了配置Hibernate,我们可以使用一个简单的hibernate.properties文件, 或者一个稍微复杂的
hibernate.cfg.xml,甚至可以完全使用程序来配置Hibernate。 多数用户喜欢使用XML配置文件:
org.hsqldb.jdbcDriver
jdbc:hsqldb:data/tutorial
sa
1
org.hibernate.dialect.HSQLDialect
true
create
注意这个XML配置使用了一个不同的DTD。我们配置Hibernate的SessionFactory- 一个关联于特定数据
库全局性的工厂(factory)。如果你要使用多个数据库,通常应该在多个配置文件中使用多个
进行配置(在更早的启动步骤中进行)。
最开始的4个property元素包含必要的JDBC连接信息。dialectproperty 表明Hibernate应该产生针对特定
数据库语法的SQL语句。hbm2ddl.auto选项将自动生成数据库表定义(schema)- 直接插入数据库中。
当然这个选项也可以被关闭(通过去除这个选项)或者通过Ant任务SchemaExport来把数据库表定义导入一
个文件中进行优化。 最后,为持久化类加入映射文件。
把这个文件拷贝到源代码目录下面,这样它就位于classpath的root路径上。Hibernate在启动时会自动 在它
的根目录开始寻找名为hibernate.cfg.xml的配置文件。
2.2.4. 用Ant编译
在这个教程里面,我们将用Ant来编译程序。你必须先安装Ant-可以从Ant download page 下载它。怎样
安装Ant不是这个教程的内容,请参考Ant manual。 当你安装完了Ant,我们就可以开始创建编译脚本,它
的文件名是build.xml,把它直接放在开发目录下面。
完善Ant
注意Ant的分发版通常功能都是不完整的(就像Ant FAQ里面说得那样),所以你常常不得
不需要自己动手来完善Ant。 例如:如果你希望在你的build文件里面使用JUnit功能。为了
让JUnit任务被激活(这个教程里面我们并不需要这个任务), 你必须拷贝junit.jar
到ANT_HOME/lib目录下或者删除ANT_HOME/lib/ant-junit.jar这个插件。
一个基本的build文件看起来像这样