1、添加索引:

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

  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping>
  6. <class name="com.bjsxt.hibernate.User" table="t_user">
  7. <id name="id">
  8. <generator class="sequence">
  9. <param name="sequence">user_id_seq</param>
  10. </generator>
  11. </id>
  12. <property name="name"></property>
  13. <many-to-one name="group" column="group_id" index="user_group_id_idx"></many-to-one>
  14. </class>
  15. </hibernate-mapping>

发出的SQL语句为:

  1. 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"来设置字段的非空约束。

  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5.  
  6. <hibernate-mapping>
  7. <class name="events.Person" table="t_person">
  8. <id name="id" column="person_id">
  9. <generator class="sequence">
  10. <param name="sequence">person_id_seq</param>
  11. </generator>
  12. </id>
  13. <property name="age"></property>
  14. <property name="firstName" unique-key="name"></property>
  15. <property name="lastName" unique-key="name"></property>
  16. <set name="emailAddresses" table="t_email" check="email_address like '%@%'">
  17. <key column="person_id"></key>
  18. <element column="email_address" type="string"></element>
  19. </set>
  20. <set name="events" table="t_person_event">
  21. <key column="person_id"></key>
  22. <many-to-many class="events.Event" column="event_id"></many-to-many>
  23. </set>
  24. </class>
  25. </hibernate-mapping>

产生的SQL语句是:

  1. drop table t_email cascade constraints
  2.  
  3. drop table t_event cascade constraints
  4.  
  5. drop table t_person cascade constraints
  6.  
  7. drop table t_person_event cascade constraints
  8.  
  9. drop sequence event_id_seq
  10.  
  11. drop sequence person_id_seq
  12.  
  13. create table t_email (
  14. person_id number(19,0) not null,
  15. email_address varchar2(255 char),
  16. check (email_address like '%@%')
  17. )
  18.  
  19. create table t_event (
  20. event_id number(19,0) not null,
  21. title varchar2(255 char),
  22. event_date date,
  23. primary key (event_id)
  24. )
  25.  
  26. create table t_person (
  27. person_id number(19,0) not null,
  28. age number(10,0),
  29. firstName varchar2(255 char),
  30. lastName varchar2(255 char),
  31. primary key (person_id),
  32. unique (firstName, lastName)
  33. )
  34.  
  35. create table t_person_event (
  36. event_id number(19,0) not null,
  37. person_id number(19,0) not null,
  38. primary key (person_id, event_id)
  39. )
  40.  
  41. alter table t_email
  42. add constraint FKA03188117708282F
  43. foreign key (person_id)
  44. references t_person
  45.  
  46. alter table t_person_event
  47. add constraint FKC7F6A31B7708282F
  48. foreign key (person_id)
  49. references t_person
  50.  
  51. alter table t_person_event
  52. add constraint FKC7F6A31BF96D1A45
  53. foreign key (event_id)
  54. references t_event
  55.  
  56. create sequence event_id_seq
  57.  
  58. 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. Spring Boot 之 RESRful API 权限控制

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “简单,踏实~ 读书写字放屁” 一.为何用RESTful API 1.1 RESTful是什么? ...

  2. spark MySQL jar 包

    /** * Created by songcl on 2016/6/24. */ import java.sql.DriverManager //val sqlContext = new org.ap ...

  3. Java程序性能优化Tip

    本博客是阅读<java time and space performance tips>这本小书后整理的读书笔记性质博客,增加了几个测试代码,代码可以在此下载:java时空间性能优化测试代 ...

  4. C、C++编译,链接,extern链接

    //b.cpp #inlcude <iostream> void b() { std::cout<<"fun b"; } //a.cpp extern vo ...

  5. [转]javascript的urlencode

    今天在一个原来使用AJAX自动缩小选择内容的项目上突然发现当输入名称时,如果输入有特殊字符&的时候,选择的内容不会发生变化,也就是说输入的内容在&后面的内容会被截断,经过查证才发现在客 ...

  6. Oracle DBA的神器: PRM恢复工具,可脱离Oracle软件运行,直接读取Oracle数据文件中的数据

    Oracle DBA的神器: PRM恢复工具,可脱离Oracle软件运行,直接读取Oracle数据文件中的数据 PRM 全称为ParnassusData Recovery Manager ,由 诗檀软 ...

  7. mount分区为读写属性

    对于只读文件系统, 如果想要挂载为可读写的, 需要重新mount下, 如将config分区mount为读写的分区: mount -o remount,rw /config

  8. NopCommerce插件学习

    在园子里看到这篇文章:http://www.cnblogs.com/haoxinyue/archive/2013/06/06/3105541.html写的非常好,我也是在此文章的基础上来一步步的学习N ...

  9. UML系列01之 UML和绘图工具Visio介绍

    概要 UML,全称是Unified Modeling Language,中文是"统一建模语言".通俗点说,UML是一种创建模型的语言.UML是在开发阶段,说明,可视化,构建和书写一 ...

  10. gcview使用

    1.下载适用的版本 https://github.com/chewiebug/GCViewer Supported verbose:gc formats are: Oracle JDK 1.8 -Xl ...