Hibernate 映射基础

来源:互联网 发布:爱淘宝1元天猫购物券 编辑:程序博客网 时间:2024/04/29 07:11

Hibernate 对持久化对象的要求

1、提供一个无参的构造器,使Hibernate可以使用Constructor.newInstance()来实例化持久化类。

       注意:在java的类中如果没有指定构造函数,那么会有一个默认的构造函数。如果手动定义了一个有参的构造函数,那么此时默认的无参构造函数                  将不存在,应该再定义一个无参构造函数。

2、提供一个标示属性,通常映射为数据库表的主键字段。

3、为持久化类的字段声明get/set 方法

4、使用非final类,如果使用fianl类,会影响懒加载特性。

5、重写equals()和hashCode()方法,如果需要把持久化类的实力放到set集合(当需要进行关联映射时)中,则应该重写这两个方法。


一般每一个实体类对应一个*.hbm.xml文件。配置方法及属性如下:


<hibernate-mapping><!-- name属性:哪个类table属性:对应哪个表,如果不写,默认的表名就是类的简单名称 --><class name="edu.fjnu.domain.User" table="t_user"><id name="id" type="int" column="id">            <generator class="sequence">            <param name="sequence">SEQUENCE_ON_USER</param>            </generator></id><!-- 普通属性(数据库中的基本类型,如字符串、日期、数字等)name属性:对象的属性名,必须有type属性:类型,如果不写,Hibernate会自动检测可以写Java中类的全名或是写hibernate类型 column属性:对应的表中的列名,如果没有默认为属性名。length属性:长度,不是所有的类型都有长度属性,比如vachar2有,但int没有,                                            如果不写默认为255not-null:非空约束,默认为false --><property name="name" type="string" column="name" length="20" not-null="true"/><property name="age" type="int" column="age"/><property name="birthday" type="date" column="birthday"/><!-- 当列名与关键字冲突时,可以通过column属性指定一个其他的列名。  或是使用反引号包围起来  指定使用text类型时,最好再指定length,以确定生成的SQL类型是能够存放指定数量的字符的 --><property name="desc" type="text" length="5000" column="`desc`"/><!-- 图片,二进制类型,最好指定长度 --><property name="photo" type="binary" length="102400"></property></class></hibernate-mapping>


映射主键属性

第7行class中可以指定主键生成的策略:

        1、identity:使用数据库的自动增长策略,不是所有数据库都支持,比如oracle就不支持

        2、sequence:oracle中可以使用序列来让主键自动增长

        3、hilo:使用高地位算法来生成的主键值。只需要一张额外的表,所有的数据库都支持

        4、native:根据底层数据库能力选择identity、sequence、hilo中的一个。

        5、increment:先查询当前最大的id值,再加1使用,由hibernate维护的自动增长,有多线程下会有

        6、assigned:手动指定一个主键值

        7、uuid:由hibernate自动生成UUID并指定为主键值

<hibernate-mapping package="edu.fjnu.hbm_id"><class name="User" table="t_user"><!-- id元素用户映射主键     子元素generator是用于指定主键生成策略的 --><id name="id" type="int" column="id">                     <generator class="assigned"/></id><property name="name" type="string" column="name" length="20" not-null="true"/></class></hibernate-mapping>












0 0
原创粉丝点击