Hibernate-----Hibernate映射文件

可由Hibernate注解代替Hibernate映射文件

一、<hibernate-mapping>:根元素

(1)、package:指定一个包前缀,若在映射文档中没有指定全限定的类名,就使用这个作为包名,如

<hibernate-mapping package="com.demo.hibernate.beans">
<class name="User" ...>
</hibernate-mapping>

<hibernate-mapping>
<class name="com.demo.hibernate.beans.User" ...>
</hibernate-mapping>

(2)、schema:指定所映射数据库的schema名,如果指定该属性,则表名会自动添加该Schema前缀

(3)、catalog:指定所映射数据库的catalog名,如果指定该属性,则表名会自动添加该catalog前缀

(4)、default-cascade:设置Hibernate默认的级联风格,默认none

(5)、default-access:指定Hibernate默认的属性访问策略;默认值为property

(6)、default-lazy:设置Hibernate默认的延迟加载策略;默认值为true

(7)、auto-import:设置是否允许在查询语言中使用非全限定的类名(仅限于本映射文件中的类);默认为true

二、<class>:定义类(用以定义一个持久化类与数据表的映射关系)

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

(2)、table:对应数据库表名

(3)、discriminator-value:默认和类名一样,一个用于区分不同的子类的值,在多态行为时使用

(4)、mutable:表明该类的实例是可变的或者是不可变的

(5)、schema:覆盖根元素<hibernate-mapping>中指定的schema名字

(6)、catalog:覆盖根元素<hibernate-mapping>中指定的catalog名字

(7)、proxy:指定一个接口,在延迟装载时作为代理使用

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

(9)、dynamic-insert:指定用于INSERT的SQL将会在执行时动态生成,并且只包含那些非空值字段

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

(11)、polymorphism:多态,界定是隐式还是显式的多态查询

(12)、where:指定定个附加的SQLWHERE条件,在抓取这个类的对象时会增加这个条件

(13)、persister:指定一个定制的ClassPersister

(14)、batch-size:指定一个用于根据标识符(identifier)抓取实例时使用的‘batch size‘(批次抓取数量)

(15)、optimistic-lock:乐观锁定,决定乐观锁定的策略

(16)、lazy:通过设置lazy="false",所有的延迟加载(Lazy fetching)功能将未被激活(disabled)

(17)、entity-name

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

(19)、rowid

(20)、subselect

(21)、abstract:用于在<union-subclass>的继承结构(hierarchies)中标识抽象超类

三、<id>:定义主键(Hibernate使用OID(对象标识符)来标识对象的唯一性,OID是关系数据库中主键在Java对象模型中的等价物,在运行时,Hibernate根据OID来维持Java对象和数据库表中记录的对应关系)

(1)name:持久化类的标识属性的名字

(2)type:指定该标志属性的数据类型;使用java类型必须使用全限定类名(带包名);若没指定,Hibernate自行判断该标志属性的数据类型

(3)column:设置标识属性所映射的数据列的列名;默认该列的列名与该标识属性的属性名相同

(4)unsaved-value:用来标志该实例是刚刚创建的,尚未保存。可以用来区分对象的状态

(5)access:Hibernate用来访问属性值的策略

如果表使用联合主键,可以映射类的多个属性为标识符属性。<composite-id>元素接受<key-property>属性映射和<key-many-to-one>属性映射作为子元素:

以下定义了两个字段作为联合主键:

<composite-id>
<key-property name="username" />
<key-property name="password" />
</composite-id>

四、<generator>:主键的生成器

<id name="id" column="ID" type="java.lang.Integer">
     <generator class="native" />
</id>

五、<property>:定义属性

用于持久化类的属性与数据库表字段之间的映射

(1)name:持久化类的属性名,以小写字母开头

(2)column:数据库表的字段名

(3)type:Hibernate映射类型的名字

(4)update:表明用于UPDATE的SQL语句中是否包含这个被映射的字段,默认为true

(5)insert:表明用于INSERT的SQL语句中是否包含这个被映射是否包含这个被映射的字段,默认为true

(6)formula:一个SQL表达式,定义了这个计算属性的值

(7)access:Hibernate用来访问属性值的策略

(8)lazy:指定实例变量第一次被访问时,这个属性是否延迟加载,默认为false

(9)unique:使用DDL为该字段添加唯一的约束,此外,这也可以用做property-ref的目标属性

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

(11)optimistic-lock:指定这个属性在进行更新时是否需要获得乐观锁定(换句话说,它决定这个属性发生脏数据时版本version的值是否增长)

*access属性用来让你控制Hibernate如何在运行时访问属性。默认情况下,Hibernate会使用属性的get/set方法对。如果你指明access="field",则Hibernate会忽略get/set方法对,直接使用反射来访问成员变量。

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

<property name="totalPrice" formula="(SELECT SUM(*) FROM user)" />

时间: 2024-11-10 05:10:58

Hibernate-----Hibernate映射文件的相关文章

使用oracle数据库和MySQL数据库时hibernate的映射文件.hbm.xml的不同

如果是使用oracle数据库,那么hibernate的映射文件.hbm.xml如下: <id name="xuehao" column="xuehao"> </id> 这个id不是数据库自动生成的,这需要注意:而且这些字段必须和实体类中相对应,实体类中还需要对应的get()方法和set()方法. 因为oracle数据库中的id都是自动生成的,所以这里不需要写数据库的id,这和MySQL数据库有很大区别:另外,MySQL数据库建表时必须指明id

hibernate 关系映射文件配置

<!--Department.hbm.xml users属性,本类与User的一对多 --> <set name="users"> <key column="departmentId"></key> <one-to-many class="User" /> </set> <!-- parent属性,本类与Department(上级)的多对一 --> <man

Hibernate实体映射文件多对多等关系简单应用技巧

第一步,写注释: <!--xx属性,本类与Yy(类)的多对一 --> <!--xx属性,本类与Yy(类)的一对多 --> <!--xx属性,本类与Yy(类)的多对多 --> <!--xx属性,本类与Yy(类)的一对一 --> 第二部,拷模版 <!--xx属性,本类与Yy(类)的多对一 --> <many-to-one name="" class="" column="">&l

hibernate之映射文件VS映射注解

前言 对于java开发者而言,注解应该不是一个陌生的概念,早在JavaSE阶段,例如@Override标记重写父类方法或实现接口方法,@Test标记单元测试方法,所以我们可以简单地把它理解为一种有特殊含义的标记...在开发过程中,我们还可以用注解方式替代配置文件实现相关功能,例如Java web开发中,3.0版本后,利用@WebServlet.@WebListener等注解分别可以替代web项目XML配置文件中相关内容.而本文中讲述的就是Hibernate的映射配置文件与映射注解的对比,这两种方

Hibernate的映射文件

映射文件的结构和属性 一个映射文件(mapping file)由一个根节点<hibernate-mapping>和多个<class>节点组成, 首先看看根节点<hibernate-mapping>支持什么属性: 1 <hibernate-mapping 2 schema="schemaName" (1) 3 catalog="catalogName" (2) 4 default-cascade="cascade_s

Hibernate的映射文件配置

对象关系的映射是用一个XML文档来说明的.映射文档可以使用工具来生成,如XDoclet,Middlegen和AndroMDA等.下面从一个映射的例子开始讲解映射元素,映射文件的代码如下: <?xml version="1.0"?> <!-- 所有的XML映射文件都需要定义如下所示的DOCTYPE. Hibernate会先在它的类路径(classptah)中搜索DTD文件. --> <!DOCTYPE hibernate-mapping PUBLIC &qu

Hibernate hbm映射文件的详解

错误演示 第一步:导入jar包   省略 第二部:创建Person类 package cn.hibernate.bean; import java.util.Date; public class Person { private Integer pId; private String pName; private int age; private Date brithdayDate; private boolean gender; private byte[] photo; private St

myeclipse中hibernate生成映射文件

在hibernate中,每个数据表对应的其实是一个实体类,每个实体类有一个对应的hbm.xml配置文件匹配,myeclipse中有个MyEclipse Database Explorer视图,它提供了myeclipse与数据库直接连接的内置窗口,并且通过此窗口可以生成hibernate的mapping文件 前提是:已经新建了一个web工程并且已经通过myeclipse添加了hibernate框架. 一.MyEclipse Database Explorer 建立数据库连接 二,到MyEclips

hibernate基本映射文件

<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.fengye.hibern

hibernate 的映射文件快速生成:使用CodeSmith快速生成映射文件和映射类

一 CodeSmith简介 本文以表自动生成NHibernate的映射文件和映射类的实例来说明一下本软件的使用方法. CodeSmith是一种基于模板的代码生成工具,其使用类似于ASP.NET的语法来生成任意类型的代码和文件.使用 CodeSmith,可以生成包括简单的强类型集合和完整应用程序在内的任何东西.(弱类型-没有明显的类型,会随着环境的不同自动变换类型:强类型-在声明时规定其数据类型,保证类的安全,虽然系统也有一定的默认转换,但是没有弱类型那么随便) 当您生成应用程序时,您经常需要重复