`

[转]Hibernate映射文件中索引及约束的使用

阅读更多

1、添加索引:在一对多的关系中,在多的一方会产生一个外键,这个外键没有自动添加索引,当存在从一的一端产生对多的一端的查询时,有可能会在多的一端造成全表查询问题,数据量巨大时会产生严重的性能问题。可以在多一端的外键上添加索引(index="user_group_id_idx")来解决这个问题。例如: 

<?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="com.bjsxt.hibernate.User" table="t_user"> 
  <id name="id"> 
   <generator class="sequence"> 
    <param name="sequence">user_id_seq</param> 
   </generator> 
  </id> 
  <property name="name"></property> 
  <many-to-one name="group" column="group_id" index="user_group_id_idx"></many-to-one> 
</class> 

</hibernate-mapping> 

发出的SQL语句为: 
create index user_group_id_idx on t_user (group_id) 

2、添加约束:id会产生主键约束,同时会建立索引;key会产生外键,但默认不会建立索引;在class或set上通过使用check关键字来产生check约束(例如:<set name="emailAddresses" table="t_email" check="email_address like '%@%'">);单个字段的唯一键通过(unique="true")设置,多个字段联合唯一通过在需要联合的字段上添加(unique-key="name")来实现,其中对联合唯一索引的unique-key的值必须相同;通过not-null="true"来设置字段的非空约束。 

<?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="events.Person" table="t_person"> 
  <id name="id" column="person_id"> 
   <generator class="sequence"> 
    <param name="sequence">person_id_seq</param> 
   </generator> 
  </id> 
  <property name="age"></property> 
  <property name="firstName" unique-key="name"></property> 
  <property name="lastName" unique-key="name"></property> 
  <set name="emailAddresses" table="t_email" check="email_address like '%@%'"> 
   <key column="person_id"></key> 
   <element column="email_address" type="string"></element> 
  </set> 
  <set name="events" table="t_person_event"> 
   <key column="person_id"></key> 
   <many-to-many class="events.Event" column="event_id"></many-to-many> 
  </set> 
</class> 
</hibernate-mapping> 

产生的SQL语句是: 

    drop table t_email cascade constraints 

    drop table t_event cascade constraints 

    drop table t_person cascade constraints 

    drop table t_person_event cascade constraints 

    drop sequence event_id_seq 

    drop sequence person_id_seq 

    create table t_email ( 
        person_id number(19,0) not null, 
        email_address varchar2(255 char), 
        check (email_address like '%@%') 
    ) 

    create table t_event ( 
        event_id number(19,0) not null, 
        title varchar2(255 char), 
        event_date date, 
        primary key (event_id) 
    ) 

    create table t_person ( 
        person_id number(19,0) not null, 
        age number(10,0), 
        firstName varchar2(255 char), 
        lastName varchar2(255 char), 
        primary key (person_id), 
        unique (firstName, lastName) 
    ) 

    create table t_person_event ( 
        event_id number(19,0) not null, 
        person_id number(19,0) not null, 
        primary key (person_id, event_id) 
    ) 

    alter table t_email 
        add constraint FKA03188117708282F 
        foreign key (person_id) 
        references t_person 

    alter table t_person_event 
        add constraint FKC7F6A31B7708282F 
        foreign key (person_id) 
        references t_person 

    alter table t_person_event 
        add constraint FKC7F6A31BF96D1A45 
        foreign key (event_id) 
        references t_event 

    create sequence event_id_seq 

    create sequence person_id_seq 

分享到:
评论

相关推荐

    hibernate array 数组映射

    在Hibernate的映射文件(hbm.xml)中,我们可以使用`&lt;array&gt;`元素来配置数组映射。基本结构如下: ```xml ``` - `name`:指定Java对象中对应属性的名称。 - `type`:指定数组元素的类型,可以是基本类型,...

    Hibernate_容器映射技术笔记

    在Hibernate中,使用`&lt;map&gt;`标签来映射,`&lt;index&gt;`定义键的列,`&lt;element&gt;`定义值的列。 延迟加载(Lazy Loading)是Hibernate的一个重要特性。它意味着关联的对象或集合不会在实体加载时立即加载,而是在实际访问...

    c# 做成数据库生成 nhibernate映射文件程序,包括oracle 和sql server

    在IT行业中,数据库管理和数据访问层的构建是关键部分,特别是在使用ORM(对象关系映射)框架时。本文将深入探讨使用C#语言创建一个能够为Oracle和SQL Server数据库自动生成NHibernate映射文件的程序。 NHibernate...

    hibernate配置文件元素详解.txt

    以下是一个简单的Hibernate映射文件示例: ```xml &lt;hibernate-mapping&gt; 员工信息 &lt;column name="EMPLOYEE_ID" precision="15" scale="0" sql-type="BIGINT" check="EMPLOYEE_ID &gt; 0"/&gt; &lt;/...

    hibernate 多对一映射

    在hibernate的映射文件中,多对一映射通常使用`&lt;many-to-one&gt;`标签来定义。假设我们有两个实体类:`Department`(部门)和`Employee`(员工),其中一个部门可以有多个员工,但一个员工只属于一个部门。在`Employee...

    hibernate中文帮助文档

    2.4. Hibernate独有的注解扩展:除了标准的EJB3注解,Hibernate还提供了一些自定义注解,如`@GeneratedValue`用于设置主键生成策略,`@Formula`用于在属性中使用SQL表达式,`@Cache`用于配置缓存,`@Filter`用于动态...

    Hibernate Annotations 中文文档

    Hibernate Annotations API 中文文档 前言 1. 创建一个注解项目 1.1. 系统需求 1.2. 系统配置 2. 实体Bean 2.1. 简介 ...5.1. 使用Lucene为实体建立索引 5.1.1. 注解领域模型 5.1.2. 启用自动索引

    hibernate annotation 中文文档

    - **2.2.2.1 声明基本的属性映射**:使用 `@Column` 注解来指定如何将实体Bean的属性映射到表中的字段。 - **2.2.2.2 声明列属性**:进一步细化属性的映射,例如设置默认值、长度等。 - **2.2.2.3 嵌入式对象...

    hibernate 中文注解

    - **无注解之属性的默认值:** 如果没有显式使用注解,Hibernate会默认将类的属性映射到表中的列。 - **映射主键属性:** 主键映射通过`@Id`注解实现。 - **映射继承关系:** - **每个类一张表:** 每个子类对应...

    hibernate_annotation_中文帮助文档

    《Hibernate Annotations中文帮助文档》是针对Java开发人员的一份详细指南,主要讲解如何使用Hibernate ORM框架中的注解来实现数据库对象的映射。该文档涵盖了从基础到高级的各种概念,帮助开发者更高效地管理和操作...

    hibernate3 帮助文档CHM

    12. **逆向工程与代码生成**:探讨了如何使用Hibernate工具从现有数据库生成Java实体类和映射文件。 13. **其他高级特性**:如级联操作、联合主键、复合主键、外键约束、乐观锁和悲观锁等。 综上所述,《Hibernate...

    达梦 Hibernate 方言 2.0 至 4.0

    3. **索引和约束**:方言更新可能涉及到对索引和表约束的处理,确保了在创建和管理表结构时,能充分利用达梦数据库的索引和约束特性。 4. **性能优化**:方言优化了SQL的生成,减少了不必要的数据库访问,提升了...

    Hibernate 多数据库支持解决方案

    这可以通过在实体类中使用Hibernate的`@ManyToOne`, `@OneToOne`, `@OneToMany`等注解来控制关联,而不是依赖于数据库的外键约束。 2. **动态加载.hbm.xml文件** - Hibernate允许通过配置文件来动态加载对应当前...

    hibernate测试

    在Java世界中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。这篇关于“hibernate测试”的文章旨在深入探讨Hibernate的核心概念,以及如何进行...

    hibernate-annotations_中文帮助文档

    在 Hibernate 2.x 版本中,元数据主要通过 XML 文件来管理。随着技术的发展,Hibernate 引入了注解(Annotations),使得元数据可以直接在 Java 类中定义,极大地提高了开发效率和代码可维护性。 #### 二、创建注解...

    hibernate教程

    - **pom.xml**或**build.gradle**:配置文件中应包含Hibernate及相关数据库驱动的依赖。 - **Hibernate配置文件**:如`hibernate.cfg.xml`,配置数据库连接信息、方言等。 - **日志框架**:配置适当的日志框架,如...

    Hibernate实战(第2版 中文高清版)

     1.1.3 在Java中使用SQL   1.1.4 面向对象应用程序中的持久化   1.2 范式不匹配   1.2.1 粒度问题   1.2.2 子类型问题   1.2.3 同一性问题   1.2.4 与关联相关的问题   1.2.5 数据导航的问题   ...

    hibernate annotation帮助文档

    - **从父类继承的属性**:在子类中使用 `@MapsId` 或 `@ManyToOne` 来映射继承的属性。 - **映射实体Bean的关联关系** - **一对一(One-to-one)**:使用 `@OneToOne` 注解来映射一对一的关系。 - **多对一(Many-...

    hibernate_-annotations_中文帮助文档.doc

    《Hibernate Annotations 中文帮助文档》提供了关于Hibernate框架中注解使用的详细指南,尤其适合那些英语阅读困难的开发者。文档涵盖了从创建注解项目到映射各种数据库元素、处理继承关系、映射关联、以及使用...

Global site tag (gtag.js) - Google Analytics