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的映射文件(hbm.xml)中,我们可以使用`<array>`元素来配置数组映射。基本结构如下: ```xml ``` - `name`:指定Java对象中对应属性的名称。 - `type`:指定数组元素的类型,可以是基本类型,...
在Hibernate中,使用`<map>`标签来映射,`<index>`定义键的列,`<element>`定义值的列。 延迟加载(Lazy Loading)是Hibernate的一个重要特性。它意味着关联的对象或集合不会在实体加载时立即加载,而是在实际访问...
在IT行业中,数据库管理和数据访问层的构建是关键部分,特别是在使用ORM(对象关系映射)框架时。本文将深入探讨使用C#语言创建一个能够为Oracle和SQL Server数据库自动生成NHibernate映射文件的程序。 NHibernate...
以下是一个简单的Hibernate映射文件示例: ```xml <hibernate-mapping> 员工信息 <column name="EMPLOYEE_ID" precision="15" scale="0" sql-type="BIGINT" check="EMPLOYEE_ID > 0"/> </...
在hibernate的映射文件中,多对一映射通常使用`<many-to-one>`标签来定义。假设我们有两个实体类:`Department`(部门)和`Employee`(员工),其中一个部门可以有多个员工,但一个员工只属于一个部门。在`Employee...
2.4. Hibernate独有的注解扩展:除了标准的EJB3注解,Hibernate还提供了一些自定义注解,如`@GeneratedValue`用于设置主键生成策略,`@Formula`用于在属性中使用SQL表达式,`@Cache`用于配置缓存,`@Filter`用于动态...
Hibernate Annotations API 中文文档 前言 1. 创建一个注解项目 1.1. 系统需求 1.2. 系统配置 2. 实体Bean 2.1. 简介 ...5.1. 使用Lucene为实体建立索引 5.1.1. 注解领域模型 5.1.2. 启用自动索引
- **2.2.2.1 声明基本的属性映射**:使用 `@Column` 注解来指定如何将实体Bean的属性映射到表中的字段。 - **2.2.2.2 声明列属性**:进一步细化属性的映射,例如设置默认值、长度等。 - **2.2.2.3 嵌入式对象...
- **无注解之属性的默认值:** 如果没有显式使用注解,Hibernate会默认将类的属性映射到表中的列。 - **映射主键属性:** 主键映射通过`@Id`注解实现。 - **映射继承关系:** - **每个类一张表:** 每个子类对应...
《Hibernate Annotations中文帮助文档》是针对Java开发人员的一份详细指南,主要讲解如何使用Hibernate ORM框架中的注解来实现数据库对象的映射。该文档涵盖了从基础到高级的各种概念,帮助开发者更高效地管理和操作...
12. **逆向工程与代码生成**:探讨了如何使用Hibernate工具从现有数据库生成Java实体类和映射文件。 13. **其他高级特性**:如级联操作、联合主键、复合主键、外键约束、乐观锁和悲观锁等。 综上所述,《Hibernate...
3. **索引和约束**:方言更新可能涉及到对索引和表约束的处理,确保了在创建和管理表结构时,能充分利用达梦数据库的索引和约束特性。 4. **性能优化**:方言优化了SQL的生成,减少了不必要的数据库访问,提升了...
这可以通过在实体类中使用Hibernate的`@ManyToOne`, `@OneToOne`, `@OneToMany`等注解来控制关联,而不是依赖于数据库的外键约束。 2. **动态加载.hbm.xml文件** - Hibernate允许通过配置文件来动态加载对应当前...
在Java世界中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。这篇关于“hibernate测试”的文章旨在深入探讨Hibernate的核心概念,以及如何进行...
在 Hibernate 2.x 版本中,元数据主要通过 XML 文件来管理。随着技术的发展,Hibernate 引入了注解(Annotations),使得元数据可以直接在 Java 类中定义,极大地提高了开发效率和代码可维护性。 #### 二、创建注解...
- **pom.xml**或**build.gradle**:配置文件中应包含Hibernate及相关数据库驱动的依赖。 - **Hibernate配置文件**:如`hibernate.cfg.xml`,配置数据库连接信息、方言等。 - **日志框架**:配置适当的日志框架,如...
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 数据导航的问题 ...
- **从父类继承的属性**:在子类中使用 `@MapsId` 或 `@ManyToOne` 来映射继承的属性。 - **映射实体Bean的关联关系** - **一对一(One-to-one)**:使用 `@OneToOne` 注解来映射一对一的关系。 - **多对一(Many-...
《Hibernate Annotations 中文帮助文档》提供了关于Hibernate框架中注解使用的详细指南,尤其适合那些英语阅读困难的开发者。文档涵盖了从创建注解项目到映射各种数据库元素、处理继承关系、映射关联、以及使用...