Hibernate关系映射的配置属性解释

1.属性及其含义

 

hibernate-mapping的属性
auto-import (可选 - 默认为 true): 指定我们是否可以在查询语言中使用非全限定的类名(仅限于本映射文件中的类)。 package (可选): 指定一个包前缀,如果在映射文档中没有指定全限定的类名, 就使用这个作为包名。

default-lazy="true"  设定全局抓取策略,默认延迟抓取

 
class的属性
name (可选): 持久化类(或者接口)的Java全限定名。 如果这个属性不存在,Hibernate将假定这是一个非POJO的实体映射。
table (可选 - 默认是类的非全限定名): 对应的数据库表名。
discriminator-value (可选 - 默认和类名一样): 一个用于区分不同的子类的值,在多态行为时使用。它可以接受的值包括 null 和 not null。
dynamic-update (可选, 默认为 false): 指定用于UPDATE 的SQL将会在运行时动态生成,并且只更新那些改变过的字段。 //这样做性能可能会用问题
dynamic-insert (可选, 默认为 false): 指定用于INSERT的 SQL 将会在运行时动态生成,并且只包含那些非空值字段。
batch-size (可选,默认是1) 指定一个用于 根据标识符(identifier)抓取实例时使用的"batch size"(批次抓取数量)。
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,sequence

assigned 让应用程序在save()之前为对象分配一个标示符。这是 <generator>元素没有指定时的默认生成策略。
native 根据底层数据库的能力选择identity, sequence 或者hilo中的一个。
increment 用于为long, short或者int类型生成 唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用。 在集群下不要使用。
identity 对DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的内置标识字段提供支持。 返回的标识符是long, short 或者int类型的。
sequence  在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence), 而在Interbase中使用生成器(generator)。返回的标识符是long, short或者 int类型的。
uuid 用一个128-bit的UUID算法生成字符串类型的标识符, 这在一个网络中是唯一的(使用了IP地址)。UUID被编码为一个32位16进制数字的字符串。

foreign

property的属性
name: 属性的名字,以小写字母开头。
column (可选 - 默认为属性名字): 对应的数据库字段名。 也可以通过嵌套的<column>元素指定。
type (可选): 一个Hibernate类型的名字。

length(可选): 该字段的长度 
lazy (可选 - 默认为 false): 指定 指定实例变量第一次被访问时,这个属性是否延迟抓取(fetched lazily)( 需要运行时字节码增强)。
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将指定该实体为对立面,因此不具用维护关联表的权限,修改这个实体的集合不会对关联表产生影响。这一点非常重要。

你可能感兴趣的:(sql,Hibernate,SQL Server,db2,Sybase)