Hibernate映射文件——.hbm.xml

映射文件的命名规则——类名.hbm.xml

映射文件告诉 hibernate 它应该访问数据库(database)里面的哪个表(table)及应该使用表里面的哪些字段(column)。

一个映射文件的基本结构:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.hibernate.tutorial.domain">
    <class name="Event" table="EVENTS">

    </class>
</hibernate-mapping> 

注意:可以在文本编辑器里打开 DTD — 这是最简单的方式来概览所有的元素和 attribute,并查看它们的缺省值以及注释。

                     Hibernate 不会从 web 加载 DTD 文件,但它会首先在应用程序的 classpath 中查找。DTD 文件已包括在hibernate3.jar 里

在 hibernate-mapping 标签(tag)之间, 含有一个 class 元素。所有的持久化实体类都需要一个这样的映射,来把类对象映射到 SQL 数据库里的表。

每个实例对应着数据库表中的一行。

唯一标识符属性到数据库表的映射,由于我们不关心怎样处理这个标识符,我们就配置由 Hibernate 的标识符生成策略来产生代理主键字段

该属性也是在hibernate-mapping 标签(tag)之间,代码如下

<hibernate-mapping package="org.hibernate.tutorial.domain">
    <class name="Event" table="EVENTS">
        <id name="id" column="EVENT_ID">
            <generator class="native"/>
        </id>
    </class>
</hibernate-mapping>

 注释:id元素是对 identity 属性的声明。 name="id" 映射属性声明了 JavaBean 属性的名称并告诉 Hibernate 使用 getId() 和 setId()方法来访问这个属性。column 属性告诉 Hibernate events表中的哪个字段持有主键值。

        generator 元素指定标识符的生成策略(也就是标识符值是怎么产生的)。在这个例子里,我们选择native,它提供了取决于数据库方言的可移植性。Hibernate 数据库生成的、全局性唯一的以及应用程序分配的标识符。标识符值的生成也是 Hibernate 的扩展功能之一,你可以插入自己的策略。

 

最后我们在映射文件里面包含需要持久化属性的声明。默认情况下,类里面的属性都被视为非持久化的:

     事例代码如下:

<hibernate-mapping package="org.hibernate.tutorial.domain">
    <class name="Event" table="EVENTS">
        <id name="id" column="EVENT_ID">
            <generator class="native"/>
        </id>
        <property name="date" type="timestamp" column="EVENT_DATE"/>
        <property name="title"/>
    </class>
</hibernate-mapping>

注释:和 id 元素一样,property元素的name属性告诉 Hibernate 使用哪个 getter 和 setter方法。

           注意:为什么 date 属性的映射含有 column attribute,而 title 却没有?当没有设定 column attribute的时候,Hibernate 缺省地使用 JavaBean 的属性名作为字段名。对于title,这样工作得很好。然而,date 在多数的数据库里,是一个保留关键字,所以我们最好把它映射成一个不同的名字。

       如果在映射文件中没有设置 type 属性的话,Hibernate 会自己试着去确定正确的转换类型和它的映射类型。在某些情况下这个自动检测机制(在Java 类上使用反射机制)不会产生你所期待或需要的缺省值。date 属性就是个很好的例子,Hibernate 无法知道这个属性(java.util.Date 类型的)应该被映射成:SQLdate,或timestamp,还是time 字段。在此例中,把这个属性映射成timestamp 转换器,这样我们预留了日期和时间的全部信息。

把新的映射加入到Hibernate的配置中:
格式:<mapping resource="org/hibernate/tutorial/domain/Event.hbm.xml"/>

转载于:https://my.oschina.net/airship/blog/818741

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值