`
wjt276
  • 浏览: 640994 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

007---Hibernate基本映射标签和属性介绍(三)

阅读更多

五、<property>标签

用于映射普通属性到表字段

<property>元素为类定义了一个持久化的,JavaBean风格的属性。

<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 (可选 - 默认为属性名字): 对应的数据库字段名。 也可以通过嵌套的<column>元素指定。(如果省略则使用,则使用name所指定的名称为字段名)

(3) type (可选): 一个Hibernate类型的名字(省略则使用hibernate默认类型),也可以自己配置其它hbernate类型(integer, long, short, float, double, character, byte, boolean, yes_no, true_false)

(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)的约束。

(9) length(可选):typevarchar时,设置字段长度

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

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

typename可以是如下几种:

Hibernate基本类型名(比如:integer, string, character,date, timestamp, float, binary, serializable, object, blob)。

一个Java类的名字,这个类属于一种默认基础类型 (比如: int, float,char, java.lang.String, java.util.Date, java.lang.Integer, java.sql.Clob)

一个可以序列化的Java类的名字。

一个自定义类型的类的名字。(比如: com.illflow.type.MyCustomType)

如果你没有指定类型,Hibernarte会使用反射来得到这个名字的属性,以此来猜测正确的Hibernate类型。 Hibernate会按照规则2,3,4的顺序对属性读取器(getter方法)的返回类进行解释。然而,这还不够。 在某些情况下你仍然需要type属性。(比如,为了区别Hibernate.DATE Hibernate.TIMESTAMP,或者为了指定一个自定义类型。)

access属性用来让你控制Hibernate如何在运行时访问属性。在默认情况下, Hibernate会使用属性的get/set方法对(pair)。如果你指明access="field", Hibernate会忽略get/set方法对,直接使用反射来访问成员变量。你也可以指定你自己的策略, 这就需要你自己实现org.hibernate.property.PropertyAccessor接口, 再在access中设置你自定义策略类的名字。

衍生属性(derive propertie)是一个特别强大的特征。这些属性应该定义为只读,属性值在装载时计算生成。 你用一个SQL表达式生成计算的结果,它会在这个实例转载时翻译成一个SQL查询的SELECT 子查询语句。

<property name="totalPrice"

    formula="( SELECT SUM (li.quantity*p.price) FROM LineItem li, Product p

                WHERE li.productId = p.productId

                AND li.customerId = customerId

                AND li.orderNumber = orderNumber )"/>

注意,你可以使用实体自己的表,而不用为这个特别的列定义别名( 上面例子中的customerId)。同时注意,如果你不喜欢使用属性, 你可以使用嵌套的<formula>映射元素。

注意:如果实体类和实体类中的属性和SQL中的关键重复,必须采用tablecolumn重新命名。

 

六、完整实例:

映射文件完整代码如下:

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

    <!--

        class标签 实体类映射到数据表

        * name属性:实体类的完整路径

        * table属性:实体类映射到数据库中的表名,如果省略,则为实体类的类名称

    -->

    <class name="com.wjt276.hibernate.User1">

        <!-- 映射数据库主键 映射到数据表中的字段名默认为类属性名,但可以利用column重新指定-->

        <id name="id" column="id">

            <!-- generator设置主键生成策略    uuid:一万年内生成唯一的字符串 -->

            <generator class="uuid"/>

        </id>

        <!--

            property 映射普通属性  映射到数据表中的字段名默认为类属性名,但可以利用column重新指定

            nuique:唯一约束;

            not-null:非空约束

            length:字段长度

        -->

        <property name="name" unique="true" not-null="true" length="20"/>

        <property name="password" not-null="true" length="10"/>

        <property name="createTime"/><!--Hibernate会自动根据实体类属性类型生成数据库表中字段类型 -->

        <property name="expireTime"/>

    </class>

</hibernate-mapping>

 

 

利用org.hibernate.tool.hbm2ddl.SchemaExport工具类生成如下HQL语句和数据表:

 

create table User1 (id varchar(255) not null, name varchar(20) not null unique, password varchar(10) not null, createTime datetime, expireTime datetime, primary key (id))

 

 

 

 

  • 大小: 5.2 KB
  • 大小: 26.3 KB
分享到:
评论

相关推荐

    Hibernate学习笔记

    007 Hibernate 基本映射标签和属性介绍 008 多对一 关联映射 009 一对一 主键关联映射_单向 010 一对一 主键关联映射_双向 011 一对一 唯一外键关联映射_单向 012 一对一 唯一外键关联映射_双向 013 session_flush ...

    hibernate复合主键映射

    复合主键映射 &lt;br&gt;通常将复合主键相关属性,单独抽取出来,建立一个独立的类 * 必须实现序列化接口 * 必须实现equals和hashcode方法 采用&lt;composite-id&gt;标签进行映射,其它属性采用正常映射

    Hibernate中文API大全

    以下是这个例子的Hibernate映射文件: &lt;component name="Name" class="eg.Name"&gt; &lt;!-- class attribute optional --&gt; 人员(Person)表中将包括pid, birthday, initial, first和 last等字段...

    hibernate多对多双向关联

    多对多双向关联 &lt;br&gt;注意映射规则: ... &lt;key&gt;中的column属性值必须等于单向关联中&lt;many-to-many&gt;标签指向的column的属性值 &lt;many-to-many&gt;中column属性值必须等于单向关联中中column的属性值

    Hibernate框架介绍以及入门 【二】Hibernate的常见配置

    Hibernate框架介绍以及入门 【二】 ...二、关于hibernate映射的配置 映射 1、【class标签的配置】 这个标签是来建立类与表(数据库)的映射关系 属性: name:类的一个全路径 table: 表名(类名如果和表名一致那么table可

    java web技术开发大全(最全最新)

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》重点讲解了Struts 2、Speing和HIbernate框架的基础知识和高级技术,如Sruts 2中的*、类型转换、国际化和标签等,HIbe rna{e的会话、0/R映射和...

    play框架手册

    用hibernate持久化对象模型 - 69 - 保持模型stateless - 70 - 07.JPA持久化 - 70 - 启动JPA实体管理器 - 70 - 获取JPA实体管理器 - 70 - 事务管理 - 71 - play.db.jpa.Model支持类 - 71 - 为GenreicModel定制id映射 ...

    play framework 框架手册 word 版

    用hibernate持久化对象模型 - 69 - 保持模型stateless - 70 - 07.JPA持久化 - 70 - 启动JPA实体管理器 - 70 - 获取JPA实体管理器 - 70 - 事务管理 - 71 - play.db.jpa.Model支持类 - 71 - 为GenreicModel定制id映射 ...

    ssh(structs,spring,hibernate)框架中的上传下载

    Tfile的Hibernate映射文件Tfile.hbm.xml放在Tfile .java类文件的相同目录下:  代码 2 领域对象映射文件 1. 2. !DOCTYPE hibernate-mapping PUBLIC 3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4. ...

    从J2SE到J2EE知识点介绍

    2. Java时间和日期类型的Hibernate映射类型 224 3. Java大对象类型的Hibernate映射类型 225 4. 关联关系映射 225 5. Hibernate的事务与并发 238 (十) 数据库 240 1. 数据库的基本概念 240 2. 数据模型 240 3. 关系...

    java web开发技术大全

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》重点讲解了Struts 2、Speing和HIbernate框架的基础知识和高级技术,如Sruts 2中的*、类型转换、国际化和标签等,HIbe rna{e的会话、0/R映射和...

    低清版 大型门户网站是这样炼成的.pdf

    4.3.1 hibernate的基本映射数据类型 212 4.3.2 hibernate的主键映射 218 4.3.3 hibernate的实体映射 228 4.3.4 映射一对一关联关系 228 4.3.5 映射多对一单向关联关系 235 4.3.6 映射一对多双向关联关系 239 ...

    jdbc基础和参考

    读取hibernate的配置文件和映射文件 3.构建SessionFactory对象 Transaction 1.事务管理对象 Query 1.查询对象,HQL Criteria 1.hibernate提供的更面向对象的一种查询方式。 准备工作: 1.java中的POJO对象存在...

    Grails 中文参考手册

    5.2.4 集合、列表和映射 5.3 持久化基础 5.3.1 保存和更新 5.3.2 删除对象 5.3.3 级联更新和删除 5.3.4 立即加载和延迟加载 5.3.4 悲观锁和乐观锁 5.4 GORM查询 5.4.1 动态查找器 5.4.2 条件查询 5.4.3 Hibernate...

    struts2_spring3_hibernate3_1.1

    将hibernate实体映射集成到spring配置文件中。 B.使用properties文件配置数据源 3.使用传统的配置文件集成框架。 A.视图层使用struts标签。 B.对用户输入验证 1.controller验证属性 2.使用Validate ...

    Java语言基础下载

    标签属性 420 HTML基本标签 422 标题元素 422 HTML格式 427 HTML实体 431 不可拆分的空格 431 HTML表格 439 表格 441 HTML列表 461 HTML图像 469 Img标签和src属性 469 HTML背景 475 内容总结 478 独立实践 479 第二...

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    1.6.1. 介绍................................................................................................................................................................... 46 1.6.2. 预订系统概况......

    spring chm文档

    5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. Spring的AOP代理 6.2. @...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

     本书介绍了java ee规范的三大主要规范jsf、ejb 3和jpa,其中jsf是sun公司提供的jsf ri;ejb 3部分则包含session bean、message driven bean的详细介绍。所使用的应用服务器是jboss 5.1和weblogic 11g,详细介绍了...

Global site tag (gtag.js) - Google Analytics