Hibernate关联映射属性介绍

如下关联映射文件:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- package表示实体类的包名 -->        
<hibernate-mapping package="com.lixue.bean">
	<!-- class结点的name表示实体的类名,table表示实体映射到数据库中table的名称 -->
	<class name="User" table="t_user">
		<id name="uid">
			<!-- 自增长 -->
			<generator class="native"/>
		</id>
		<property name="uname"/>
		<property name="birthday"/>
	</class>
</hibernate-mapping>

id属性详解:

<id name="propertyName" type="typename" column="column_name" access="field|property|ClassName"> 
	<generator class="generatorClass"/> 
</id>
name(可选):标识属性的名字。

type(可选):标识Hibernate类型的名字。

column(可选-默认为属性名):主键字段的名字。

access(可选-默认为property):Hibernate用来访问属性值的策略。


主键生成器:

常用的有:

1.increment标识符生成器:Hibernate会以自增的方式生成标识符,事实上是在Hibernate的初始化阶段读取将要操作的表中的最大的ID(select max ( ID) from tableName)向数据库中插入数据时再在此基础上递增。这样就会存在并发问题:如果同时有两个Hibernate进程读取了这个最大值(假设为100),在向数据库中插入数据的时候都会想插入ID为101的记录,这样就违反了了数据库的约束。这个问题只要是存在两个sessionFactory就会发生,不能再集群下使用。

优点:生成标识符的机制下不依赖于底层数据库,适用于所有的数据库系统。


2.identity标识符生成器:identity标识符生成器由底层数据库来负责生成标识符,它要求底层数据库把主键定义为自动增长字段类型,比如MySQL中定义为auto_inncrement、SQL Server中定义为identity。

优点:必须依赖于底层数据库。


3.sequence标识符生成器:sequence标识符生成器利用底层数据库提供的序列来生成标识符(需要在数据库中创建一个序列)。

优点:适用于Oracle数据库。


4.native标识符生成器:native标识符生成器依赖底层数据库对自动生成标识符的支持能力,来选择使用identity,sequence,Hilo标识符生成器。native能自动判读底层数据库提供的生成符机制,如果为MySQL和SQL Server为identity,如果数据库为Oracle则为sequence。


5.assigned标识符生成器:有程序指定OID。

6.uuid.hex:用一个128-bit的uuid算法生成字符串类型的标识符。使用了IP地址,JVM的启动时间(精确到1/4秒),系统时间和一个计数器值(在JVM中唯一)。用该算法生成的ID可以确保在一个网络中唯一。适用于多应用的环境,即使在多实例并发的环境中也可以确保唯一。并且解决了多个数据库的部分数据合并。


Property的配置:

<property name="propertyName" 
column="column_name" 
type="typename" 
update="true|false" 
insert="true|false" 
formula="arbitrary SQL expression" 
access="field|property|ClassName" 
lazy="true|false" 
unique="true|false" 
not-null="true|false" 
optimistic-lock="true|false" 
generated="never|insert|always" 
index="index_name" 
unique_key="unique_key_id" 
length="L" 
precision="P" scale="S" />

name:属性的名字,以小写字母开头。

column(可选-默认为属性名字):对应的数据库字段名。也可以通过嵌套的<column>元素指定。

type(可选):一个Hibernate类型的名字。

update,insert(可选-默认为true):表明用于UPDATE和/或INSERT的SQL语句中是否包含这个被映射了的字段。这二者如果都设置为false则表明这是一个"外源性(derived)"的属性,它的值来源于映射到同一个(或多个)字段的某些其他属性,或者通过一个trigger(触发器)或其他程序生成。

formula(可选):一个SQL表达式,定义了这个计算(computed)属性的值。计算属性没有和它对应的数据库字段。

access(可选-默认为property):Hibernate用来访问属性值的策略。

lazy(可选-默认为false):指定实例变量第一次被访问时,这个属性是否延迟抓取(fetched lazily)。

unique(可选):使用DDL为该字段添加唯一的约束。同样,允许它作为property-ref引用的目标。

not-null(可选):使用DDL为该字段添加是否为空(nullablity)的约束。

optimistic-lock(可选-默认为true):指定这个属性在做更新时是否需要获得乐观锁(optimistic lock)。换句话说,它决定这个属性发生脏数据时版本的值是否增长。

generated(可选-默认为nerver):表明此属性值是否实际上是由数据库生成的。


Hibernate数据类型的映射:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值