Hibernate-映射详解(一)

本文详细介绍了Hibernate中class、id和property标签的映射配置,包括name、table、discriminator-value等属性的用途和作用,以及如何进行动态INSERT和UPDATE操作、乐观锁定策略等高级特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

class标签映射

<class
        name="ClassName"(1)
        table="tableName"(2)
        discriminator-value="discriminator_value"(3)
        mutable="true|false"(4)
        schema="owner"(5)
        catalog="catalog"(6)
        proxy="ProxyInterface"(7)
        dynamic-update="true|false"(8)
        dynamic-insert="true|false"(9)
        select-before-update="true|false"(10)
        polymorphism="implicit|explicit"(11)
        where="arbitrary sql where condition"(12)
        persister="PersisterClass"(13)
        batch-size="N"(14)
        optimistic-lock="none|version|dirty|all"(15)
        lazy="true|false"(16)
        entity-name="EntityName"(17)
        check="arbitrary sql check condition"(18)
        rowid="rowid"(19)
        subselect="SQL expression"(20)
        abstract="true|false"(21)
        node="element-name"
/>

(1) name(可选):持久化类(或者接口)的 Java 全限定名。 如果这个属性不存在,Hibernate 将假定这是一个非 POJO
的实体映射。

(2) table(可选 — 默认是类的非全限定名):对应的数据库表名。

(3) discriminator-value(可选 — 默认和类名一样):一个用于区分不同的子类的值,在多态行为时使用。它可以接受的值包括
null 和 not null。

(4) mutable(可选,默认值为 true):表明该类的实例是可变的或者不可变的。

(5) schema(可选):覆盖在根 元素中指定的 schema 名字。

(6) catalog(可选):覆盖在根 元素中指定的 catalog 名字。

(7) proxy(可选):指定一个接口,在延迟装载时作为代理使用。你可以在这里使用该类自己的名字。

(8) dynamic-update(可选,默认为 false):指定用于 UPDATE 的 SQL
将会在运行时动态生成,并且只更新那些改变过的字段。

(9) dynamic-insert(可选,默认为 false):指定用于 INSERT 的 SQL
将会在运行时动态生成,并且只包含那些非空值字段。

(10) select-before-update(可选,默认为 false):指定 Hibernate 除非确定对象真正被修改了(如果该值为
true — 译注),否则不会执行 SQL UPDATE 操作。在特定场合(实际上,它只在一个瞬时对象(transient
object)关联到一个新的 session 中时执行的 update() 中生效),这说明 Hibernate 会在 UPDATE
之前执行一次额外的 SQL SELECT 操作来决定是否确实需要执行 UPDATE。

(11) polymorphisms (optional - defaults to implicit): determines whether
implicit or explicit query polymorphisms is used.

(12) where(可选)指定一个附加的 SQL WHERE 条件,在抓取这个类的对象时会一直增加这个条件。

(13) persister(可选):指定一个定制的 ClassPersister。

(14) batch-size(可选,默认是 1)指定一个用于 根据标识符(identifier)抓取实例时使用的 “batch
size”(批次抓取数量)。

(15) optimistic-lock(乐观锁定)(可选,默认是 version):决定乐观锁定的策略。

(16) lazy(可选):通过设置 lazy=”false”,所有的延迟加载(Lazy
fetching)功能将被全部禁用(disabled)。

(17) entity-name (optional - defaults to the class name): Hibernate3
allows a class to be mapped multiple times, potentially to different
tables. It also allows entity mappings that are represented by Maps or
XML at the Java level. In these cases, you should provide an explicit
arbitrary name for the entity. See 第 4.4 节 “动态模型(Dynamic models)” and
第 20 章 XML 映射 for more information.

(18) check(可选):这是一个 SQL 表达式, 用于为自动生成的 schema 添加多行(multi-row)约束检查。

(19) rowid(可选):Hibernate 可以使用数据库支持的所谓的 ROWIDs,例如:Oracle 数据库,如果你设置这个可选的
rowid,Hibernate 可以使用额外的字段 rowid 实现快速更新。ROWID
是这个功能实现的重点,它代表了一个存储元组(tuple)的物理位置。

(20) subselect(可选):它将一个不可变(immutable)并且只读的实体映射到一个数据库的子查询中。当你想用视图代替一张基本表的时候,这是有用的,但最好不要这样做。更多的介绍请看下面内容。

(21) abstract(可选):用于在 的层次结构(hierarchies)中标识抽象超类。

id标签映射

<id
        name="propertyName"(1)
        type="typename"(2)
        column="column_name"(3)
        unsaved-value="null|any|none|undefined|id_value"(4)
        access="field|property|ClassName">(5)   
        <generator class="generatorClass"/>
</id>

(1) name(可选):标识属性的名字。

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

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

(4) unsaved-value(可选 —
默认为一个切合实际(sensible)的值):一个特定的标识属性值,用来标志该实例是刚刚创建的,尚未保存。这可以把这种实例和从以前的session 中装载过(可能又做过修改–译者注)但未再次持久化的实例区分开来。

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

property标签映射

<property
        name="propertyName"(1)
        column="column_name"(2)
        type="typename"(3)
        update="true|false"(4)
        insert="true|false"(4)
        formula="arbitrary SQL expression"(5)
        access="field|property|ClassName"(6)
        lazy="true|false"(7)
        unique="true|false"(8)
        not-null="true|false"(9)
        optimistic-lock="true|false"(10)
        generated="never|insert|always"(11)
        node="element-name|@attribute-name|element/@attribute|."
        index="index_name"
        unique_key="unique_key_id"
        length="L"
        precision="P"
        scale="S"
/>

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

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

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

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

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

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

(7)lazy(可选 — 默认为 false):指定 指定实例变量第一次被访问时,这个属性是否延迟抓取(fetched lazily)(
需要运行时字节码增强)。

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

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

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

(11)generated(可选 — 默认为 never):表明此属性值是否实际上是由数据库生成的。请参阅 generated
properties 的讨论。

敬请关注:Hibernate-映射详解(二)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值