Hibernate关系映射的配置属性解释
1.属性及其含义
hibernate-mapping的属性 auto-import (可选 - 默认为 true): 指定我们是否可以在查询语言中使用非全限定的类名(仅限于本映射文件中的类)。 package (可选): 指定一个包前缀,如果在映射文档中没有指定全限定的类名, 就使用这个作为包名。
default-lazy="true" 设定全局抓取策略,默认延迟抓取
class的属性
name(可选):持久化类(或者接口)的Java全限定名。如果这个属性不存在,Hibernate将假定这是一个非POJO的实体映射。
table(可选-默认是类的非全限定名):对应的数据库表名。
discriminator-value(可选-默认和类名一样):一个用于区分不同的子类的值,在多态行为时使用。它可以接受的值包括null和notnull。
dynamic-update(可选,默认为false):指定用于UPDATE的SQL将会在运行时动态生成,并且只更新那些改变过的字段。//这样做性能可能会用问题
dynamic-insert(可选,默认为false):指定用于INSERT的SQL将会在运行时动态生成,并且只包含那些非空值字段。
batch-size(可选,默认是1)指定一个用于根据标识符(identifier)抓取实例时使用的"batchsize"(批次抓取数量)。
optimistic-lock(乐观锁定)(可选,默认是version):决定乐观锁定的策略。optimistic-lock="none|version|dirty|all"
lazy (可选): 通过设置lazy="false", 所有的延迟加载(Lazy fetching)功能将被全部禁用(disabled)。id的属性
name(可选):标识属性的名字。
column(可选-默认为属性名):主键字段的名字。
type (可选): 标识Hibernate类型的名字。generator的属性
<generator class="generatorClass"/> 默认为 assigned,比较常用的:native,identity,sequenceassigned 让应用程序在save()之前为对象分配一个标示符。这是 <generator>元素没有指定时的默认生成策略。
native根据底层数据库的能力选择identity,sequence或者hilo中的一个。
increment用于为long,short或者int类型生成唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用。在集群下不要使用。
identity对DB2,MySQL,MSSQLServer,Sybase和HypersonicSQL的内置标识字段提供支持。返回的标识符是long,short或者int类型的。
sequence在DB2,PostgreSQL,Oracle,SAPDB,McKoi中使用序列(sequence),而在Interbase中使用生成器(generator)。返回的标识符是long,short或者int类型的。
uuid用一个128-bit的UUID算法生成字符串类型的标识符,这在一个网络中是唯一的(使用了IP地址)。UUID被编码为一个32位16进制数字的字符串。
foreignproperty的属性
name:属性的名字,以小写字母开头。
column(可选-默认为属性名字):对应的数据库字段名。也可以通过嵌套的<column>元素指定。
type (可选): 一个Hibernate类型的名字。length(可选): 该字段的长度
lazy(可选-默认为false):指定指定实例变量第一次被访问时,这个属性是否延迟抓取(fetchedlazily)(需要运行时字节码增强)。
unique(可选):使用DDL为该字段添加唯一的约束。同样,允许它作为property-ref引用的目标。
not-null (可选): 使用DDL为该字段添加可否为空(nullability)的约束。index(可选): 指定在该字段上建立索引并命名
update,insert(可选-默认为true):表明用于UPDATE和/或INSERT的SQL语句中是否包含这个被映射了的字段。这二者如果都设置为false则表明这是一个“外源性(derived)”的属性,它的值来源于映射到同一个(或多个)字段的某些其他属性,或者通过一个trigger(触发器)或其他程序生成。
<many-to-one>表示级连删除更新或创建
cascade="all|none|save-update|delete|all-delete-orphan|delete-orphan"
创建的时候如果引用的对象没有创建的话就会创建
更新的时候如果修改引用对象的话,引用的对象本身也会修改-------------------------------------
X-to-X 关联配置属性
cascade 表示级联操作时的更新或创建 "all|none|save-update|delete|all-delete-orphan|delete-orphan"
all : 所有情况下均进行关联操作。相对于 save-update and delete
none:所有情况下均不进行关联操作。这是默认值。
save-update:在执行save/update/saveOrUpdate时进行关联操作。
delete:在执行delete时进行关联操作。all-delete-orphan 的意思是当对象图中产生孤儿节点时,在数据库中删除该节点 fetch 参数指定了关联对象抓取的方式是select查询还是join查询;默认为join查询
select方式时先查询返回要查询的主体对象(列表),再根据关联外键id,每一个对象发一个select查询,获取关联的对象,形成n+1次查询;
join方式,主体对象和关联对象用一句外键关联的sql同时查询出来,不会形成多次查询。
如果你的关联对象是延迟加载的,它当然不会去查询关联对象。
另外,在hql查询中配置文件中设置的join方式是不起作用的(而在所有其他查询方式如get、criteria或再关联获取等等都是有效的),会使用select方式,除非你在hql中指定join fetch某个关联对象。one-to-one属性
constrained 默认为false,只要一种情况才会设置为true,就是在id生成策略是foreign时
set属性
inverse 默认false,这个属性的引入时为了解决many-to-many 谁是这面,谁是对立面。inverse=true将指定该实体为对立面,因此不具用维护关联表的权限,修改这个实体的集合不会对关联表产生影响。这一点非常重要。