Hibernate对象关系映射常用标签(二)

来源:互联网 发布:sql 添加自增列 编辑:程序博客网 时间:2024/06/05 14:09

hibernate-mapping

hibernate映射的根标签

<hibernate-mapping schema="mybatase" package="com.pre.entity">

常用属性:schema (可选): 值为数据库的名称,添加此属性后,运行结果与之前不同的是生成的sql语句中表名带了数据库的名称 。如下图:

这里写图片描述

package (可选): 指定一个包前缀,如果在映射文档中的class标签中没有指定全限定的类名, 就使用这个作为包名,值为要映射的类的包名,如果包名书写的不正确,运行时会报错,错误如下,主要是说找不到类。

这里写图片描述

class

<class name="User" table="tuser">

name : 持久化类(或者接口)的Java全限定名。 如果这个属性不存在,Hibernate将假定这是一个非POJO的实体映射,在对象关系映射时此属性必须书写,若hibernate-mapping标签中没有写package属性,值为要映射的类的全限定名,反之只需写类名。

table (可选 - 默认是类的非全限定名): 对应的数据库表名,如果不写,在映射时数据库中生成的表名就是类名的首字母改为小写之后的名称,如果写了数据库的表名就是此属性的值,如下图。

这里写图片描述

id

<id name="id" type="string" column="tid"><id name="id" type="java.lang.String">

name (必选): 标识属性的名字,映射的类的属性的名称。
type (可选): 标识Hibernate类型的名字,类型指的是hibernate的基本类型,是以小写字母开头的。在映射的过程中,先将java的类型转化为Hibernate自己的类型,再将hibernate的类型转化成数据库字段的类型,此属性的值有两种书写方式,首字母小写就是Hibernate的类型,首字母大写就是java的类型,此时要写其的全限定名。
column(可选):表的列名,如果不指明,最终生成表的列名就是类的属性名,如果指明了列名就是此属性的值,此处大小写无所谓,因为数据库的列名是不区分大小写的。

这里写图片描述
length:,不是id中的属性是property中的指明在创建表时字段的长度,若不指明会是默认长度如int类型的是11,varchar类型的是255,当指明了就是指明的长度,但是int类型的在指明了长度之后还是默认默认的。

    <property name="userName" length="50"></property>

Generator主键生成器

<generator class="native"></generator>

class属性常用的值
1.native:根据底层数据库的能力自动选择identity, sequence ,所有的数据库都可以配置该属性,以保证数据库的主键自增,用来维护数据唯一性。 该配置数据库底层维护自增。
2.increment:也是配置数据库主键自增属性,但是oracle不支持该配置,mysql支持该配置,该属性配置主键自增是由hibernate自己写了一个算法来维护自增的,是通过查出数据库中最大的给其加一完成的。
3.sequence:该配置是支持序列自增数据,不支持序列的数据库配置该属性就出错。
4.identity 对DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的内置标识字段提供支持 。
5.assigned:指派,就是在添加数据的时候不会自增,需要为其指定主键的值,由程序员手动在程序中指定,不提倡使用。
6.uuid:用一个128-bit的UUID算法生成字符串类型的标识符,hibernate自动生成长度为32位字符串,使用时主键须是字符串类型的。

unique="true" not-null="true"

这两个属性用来确保字段的唯一性,和不为空性。
本文仅写了一些常用的,如需了解更多的,可去官方的api中了解。

原创粉丝点击