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之映射文件中索引及约束的使用的更多相关文章

  1. Hibernate的映射文件中基于主键的双向1对1的关联

    1.Hibernate中采用基于主键的映射策略是,有一端(任意一端)的主键生成策略要是foreign,根据对方的主键来生成自己的主键,它的实体不能拥有自己的主键生成策略,如我的配置文件: <?x ...

  2. Hibernate的映射文件

    映射文件的结构和属性 一个映射文件(mapping file)由一个根节点<hibernate-mapping>和多个<class>节点组成, 首先看看根节点<hiber ...

  3. Hibernate之深入Hibernate的映射文件

    这周周末 要把hibernate的映射文件搞定 .. 1.映射文件的主结构 主要结构  :根元素为<hibernate-mapping ></hibernate-mapping> ...

  4. Hibernate(2)映射文件Xxx-hbm.xml

    1.Hibernate映射文件Xxx-hbm.xml ①POJO 类和关系数据库之间的映射可以用一个XML文档来定义.通过 POJO 类的数据库映射文件,Hibernate可以理解持久化类和数据表之间 ...

  5. hibernate之映射文件VS映射注解

    前言 对于java开发者而言,注解应该不是一个陌生的概念,早在JavaSE阶段,例如@Override标记重写父类方法或实现接口方法,@Test标记单元测试方法,所以我们可以简单地把它理解为一种有特殊 ...

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

    假设是使用oracle数据库.那么hibernate的映射文件.hbm.xml例如以下: <id name="xuehao" column="xuehao" ...

  7. Mybatis映射文件中#取值时指定参数相关规则

    Mybatis映射文件中#取值时指定参数相关规则 在#{}中,除了需要的数值外,还可以规定参数的一些其他规则. 例如:javaType,jdbcType,mode(存储过程),numericScale ...

  8. XML映射文件中关系映射

    映射(多)对一.(一)对一的关联关系 1).使用列的别名 ①.若不关联数据表,则可以得到关联对象的id属性 ②.若还希望得到关联对象的其它属性.则必须关联其它的数据表 1.创建表: 员工表: DROP ...

  9. Mybatis映射文件中的参数传递

    一.接口中只有一个参数 1.参数是基本类型or基本类型的包装类or字符串类型 这种情况下映射文件中#{}里的内容可以是任意的,你可以使用#{xxx} 或 #{abc} .....因为此时#{}相当于一 ...

随机推荐

  1. android_audio

    参考   source.android.com/devices/audio.html

  2. LocalBroadcastManager 使用小解

    最近在开发平板项目,完全是fragmentactivity+fragment的结构.看起来似乎简单,但是和以前不同的是,业务逻辑非常复杂,多处的非常规跳转,fragment之间的数据交换,一处更新多处 ...

  3. Android Studio开发第四篇版本管理Git(下)

    前面一片介绍了在as下如何关联远程仓库,这篇就介绍在开发过程中怎么应用. 提交+Push 如果本地开发代码有改动了或者你觉得某功能做完了,你打算把改动代码提交到远程仓库,这个时候很简单, 还是在工具栏 ...

  4. python 字符串分割

    字符串分割,可以用split,rsplit方法,通过相应的规则来切割成生成列表对象 info = 'name:haha,age:20$name:python,age:30$name:fef,age:5 ...

  5. c++ 全局变量初始化的一点总结

    注意:本文所说的全局变量指的是 variables with static storage,措词来自 c++ 的语言标准文档. 什么时候初始化 根据 C++ 标准,全局变量的初始化要在 main 函数 ...

  6. NopCommerce 开源商城下载配置安装

    NopCommerce 是一款开源商城系统,提供了完整的解决方案.应该来说是目前最完善,功能最强劲的商城系统.基于ASP.NET MVC 框架,EF框架,数据库MSSQL. 系统版本涵盖了从MVC3. ...

  7. VS快捷键的简单总结

    一.一般的快捷键 Shift+Alt+Enter: 切换全屏编辑 Ctrl+B,T / Ctrl+K,K: 切换书签开关Ctrl+B,N / Ctrl+K,N: 移动到下一书签Ctrl+B,P: 移动 ...

  8. 代码演示 .NET 4.5 自带的 ReadonlyCollection 的使用

    代码如下: 1. using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...

  9. (转)offsetof与container_of宏[总结]

    1.前言 今天在看代码时,遇到offsetof和container_of两个宏,觉得很有意思,功能很强大.offsetof是用来判断结构体中成员的偏移位置,container_of宏用来根据成员的地址 ...

  10. Web程序员开发App系列 - 申请苹果开发者账号

    Web程序员开发App系列 Web程序员开发App系列 - 认识HBuilder Web程序员开发App系列 - 申请苹果开发者账号 Web程序员开发App系列 - 调试Android和iOS手机代码 ...