五、<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(可选):当type为varchar时,设置字段长度
(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中的关键重复,必须采用table或column重新命名。
六、完整实例:
映射文件完整代码如下:
<?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映射文件结构: ```xml <hibernate-mapping> <class name="com.bulletin.bean.Bulletin" table="BULLETIN" schema="XJL" dynamic-insert="true" dynamic-update="true"> <!...
在Java的持久化框架Hibernate中,集合映射是将数据库中的表关系映射到对象的集合属性上,以便更好地管理和操作数据。这篇文章将深入探讨Hibernate中的集合映射机制,包括其基本概念、类型以及如何在实际开发中进行...
007---Hibernate映射标签和属性 - `<generator>`元素:用于定义主键生成策略,如increment、sequence、identity等。 - `<property>`标签:用于映射类的普通属性,包含name、type、column等属性。 例如,一个简单的...
在Hibernate配置文件中,我们通过`<element>`标签来指定元素的类型和字段映射。例如,如果集合元素是基本类型,我们可以直接映射;如果是复杂类型的对象,就需要指定对应的实体类。 3. **一对一(One-to-One)映射*...
### J2EE电子商务系统开发从入门...以上内容详细介绍了如何使用J2EE、Struts和Hibernate技术开发一个电子商务系统的过程,包括理论知识、实践步骤等方面的内容。希望这些知识点能够帮助读者更好地理解和掌握这些技术。
在Hibernate中,数组映射是将数据库表的一列或多列数据映射到Java对象的一个数组属性上。数组可以是基本类型数组或对象类型的数组。这种映射方式简化了数据访问,并提高了代码的可读性和可维护性。 ### 配置数组...
本文将详细介绍如何在MyEclipse中创建和使用Hibernate映射文件。 首先,理解Hibernate映射文件(.hbm.xml)的作用。这些文件是XML文档,它们定义了数据库表与Java类之间的映射关系,包括字段对应、主键设置、关联...
Hibernate是Java领域中一款强大的对象关系映射框架,它允许开发者用面向对象的...通过理解并熟练应用多对一、一对一和一对多映射,以及级联操作和事务隔离级别,我们可以更好地利用Hibernate提升Java应用的开发效率。
"多对一"关系映射是Hibernate支持的四种基本关联类型之一,包括一对一、一对多、多对一和多对多。本篇将深入探讨“多对一”关系映射的概念、配置以及在实际web系统中的应用。 **一、“多对一”关系映射概念** 在...
- **1.1.2 传统三层软件设计架构**:这一部分描述了三层架构的基本概念,即表示层、业务逻辑层和数据访问层的分离,这有助于提高系统的可维护性和灵活性。 - **1.1.3 n层软件架构及Web软件架构**:这部分讨论了...
综上所述,"Hibernate映射配置实例大全"涵盖的内容广泛,包括基本的配置文件设置、实体类的XML和注解映射、集合映射、加载策略、事务管理和缓存配置等。通过深入学习和实践这些实例,开发者可以熟练地运用Hibernate...
"Hibernate one-to-many / many-to-one关系映射"是两个基本的关系类型,用于表示实体间的关联。在这个主题中,我们将深入探讨这两种关系映射的原理、配置和实际应用。 一、一对一(one-to-one)与一对多(one-to-...
在这个映射文件中,`<class>`标签定义了实体类与数据库表的对应关系,`name`属性是实体类的全限定名,`table`属性是数据库中的表名。`<id>`标签表示主键,`name`属性是实体类中的属性名,`column`属性是数据库表中的...
描述:本文深入解析了Hibernate映射文件配置的核心概念,重点阐述了映射文件的基本结构及其组成部分,包括主键(id)、普通属性(property)等关键元素的配置方法和策略。 ### Hibernate映射文件配置详解 在...
通过本文的介绍,我们不仅了解了Hibernate关系映射的基本概念和常用标签,还深入探讨了几种常见的关系类型及其映射方法。理解并熟练掌握这些知识将极大地帮助开发人员利用Hibernate进行高效的数据持久化操作。在未来...
【压缩包子文件的文件名称列表】:“hibernate映射文件自动生成.doc”很可能是这篇博文的文档形式,其中详细介绍了具体的操作步骤、使用工具或者自定义脚本,以帮助开发者理解并应用自动化的映射文件生成过程。...