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> 
View Code

發出的SQL語句為: 

create index user_group_id_idx on t_user (group_id) 
View Code

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> 
View Code

產生的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
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM