Hibernate表的映射.docx

上传人:b****5 文档编号:6912620 上传时间:2023-01-12 格式:DOCX 页数:66 大小:29.24KB
下载 相关 举报
Hibernate表的映射.docx_第1页
第1页 / 共66页
Hibernate表的映射.docx_第2页
第2页 / 共66页
Hibernate表的映射.docx_第3页
第3页 / 共66页
Hibernate表的映射.docx_第4页
第4页 / 共66页
Hibernate表的映射.docx_第5页
第5页 / 共66页
点击查看更多>>
下载资源
资源描述

Hibernate表的映射.docx

《Hibernate表的映射.docx》由会员分享,可在线阅读,更多相关《Hibernate表的映射.docx(66页珍藏版)》请在冰豆网上搜索。

Hibernate表的映射.docx

Hibernate表的映射

Hibernate各种映射处理

Hibernate各种映射处理1

1.一对多(多对一)的关联3

(1)多对一(单项关联)3

(2).一对多(单项关联)7

(3).一对多、多对一双向关联10

2..一对一关联16

(1)一对一单项关联16

(2)一对一双向关联19

3..多对多关联24

(1)中间表不映射(即三个表两个配置文件)24

(2)多对多(三个表,中间表参与映射,且有主键,三个映射文件)31

4、继承映射38

(1)三个表通过外键关联39

(2)两个表(只有两个表,两个映射文件,三个类)44

(3)一个表的做法(建立的表需要有一个标字位)48

注意cascade、fetch、lazy、inverse的用法

fetch和inverse主要用在select中,cascade和inverse用在updatedeleteinsert/save

(1)cascadecascade的值可以为noneallsave-update几种,默认为none,一般用于有insertupdatedelete.的程序中。

(2)fetchfetch一般的值为select,可有可无,设置查询数据的方式

(3)lazylazy的值为true或false,true代表查询父表顺便把子表也查询,false代表查询父表,子表在需要读取时才select,一般设置为false,能够提高项目的效率。

(4)inverse控制反转,一般用于双向关联,在非多对多的映射中,inverse=true,设置主控方为多的一方,默认为false,此时一般需要设置级联cascade.一般用于有insertupdatedelete的程序中。

================================================数据库表

createdatabasehibernatesql;

usehibernatesql;

createtableuser(

idintauto_incrementprimarykey,

usernamevarchar(15)notnull,

passwordvarchar(15)notnull

)engine=InnoDBdefaultcharset=GBK;

-----

createtablestudent(

idintauto_incrementprimarykey,

namevarchar(12)notnull,

agevarchar(12)notnull

)engine=InnoDBdefaultcharset=GBK;

----------

createtablepassenger(

idintauto_incrementprimarykey,

namevarchar(15),

emailvarchar(15),

telvarchar(15)

)engine=InnoDBdefaultcharset=GBK;

------------------

createtableemployee(

idintauto_incrementprimarykey,

namevarchar(20),

iconblob

)engine=InnoDBdefaultcharset=GBK;

---主键为uuid形式

createtableautoid(

idintprimarykey,

namevarchar(23)

)engine=InnoDBdefaultcharset=GBK;

--复合主键

createtabledoublekey(

numvarchar(32),

namevarchar(15),

primarykey(num,name)

)engine=InnoDBdefaultcharset=GBK;

--assigned形式主键

createtableapptable(

numnamevarchar(25)primarykey,

usermessagevarchar(20)

)engine=InnoDBdefaultcharset=GBK;

--blob类型图片的添加

createtableblobphoto(

idintauto_incrementprimarykey,

smailevarchar(25),

imageblob

)engine=InnoDBdefaultcharset=GBK;

--onetomany

--room

createtableroom(

idintauto_incrementprimarykey,

namevarchar(25),

addressvarchar(25)

)engine=InnoDBdefaultcharset=GBK;

--emp

createtableemp(

idintauto_incrementprimarykey,

namevarchar(20),

messagevarchar(20),

ridint,

keyFK_emp_room(rid),

constraintFK_emp_roomforeignkey(rid)referencesroom(id)

)engine=InnoDBdefaultcharset=GBK;

1.一对多(多对一)的关联

(1)多对一(单项关联)

packageutil;

publicclassRoom1{

privateIntegerid;

privateStringname;

privateStringaddress;

publicRoom1(){

}

publicRoom1(Stringname,Stringaddress){

this.name=name;

this.address=address;

}

publicIntegergetId(){

returnid;

}

publicvoidsetId(Integerid){

this.id=id;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicStringgetAddress(){

returnaddress;

}

publicvoidsetAddress(Stringaddress){

this.address=address;

}

}

=============================================

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN"

"

=============================

packageutil;

publicclassEmp1{

privateIntegerid;

privateStringname;

privateStringmessage;

privateRoom1room1;

publicEmp1(){

}

publicEmp1(Stringname,Stringmessage,Room1room1){

this.name=name;

this.message=message;

this.room1=room1;

}

publicIntegergetId(){

returnid;

}

publicvoidsetId(Integerid){

this.id=id;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicStringgetMessage(){

returnmessage;

}

publicvoidsetMessage(Stringmessage){

this.message=message;

}

publicRoom1getRoom1(){

returnroom1;

}

publicvoidsetRoom1(Room1room1){

this.room1=room1;

}

}

======================================

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEhibernate-mappingPUBLIC

"-//Hibernate/HibernateMappingDTD3.0//EN"

"

--注意单项关联只需要在一方进行配置关系-->

update">

--注意一般外键允许为空-->

==================================

SignalManytoOne.java

packagedeal;

importorg.hibernate.Session;

importorg.hibernate.Transaction;

importutil.Emp1;

importutil.HibernateSessionFactory;

importutil.Room1;

publicclassSignalManytoOne{

privatestaticSessionsession;

privatestaticTransactionts;

publicstaticvoidmain(String[]args){

//应先插入父表

Room1r1=newRoom1("as","yyyyy");

Emp1em1=newEmp1("ae1","mm1",r1);

Emp1em2=newEmp1("ae2","mm1",r1);

Emp1em3=newEmp1("ae3","mm1",r1);

Emp1em4=newEmp1("ae4","mm1",r1);

Emp1em5=newEmp1("ae5","mm1",r1);

saveEmp(em1);

saveEmp(em2);

saveEmp(em3);

saveEmp(em4);

saveEmp(em5);

}

publicstaticvoidsaveEmp(Emp1em1){

//TODOAuto-generatedmethodstub

session=HibernateSessionFactory.getSession();

ts=session.beginTransaction();

session.save(em1);

mit();

session.close();

}

}

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

(2).一对多(单项关联)

packageutil;

publicclassEmp2{

privateIntegerid;

privateStringname;

privateStringmessage;

publicEmp2(){

}

publicEmp2(Stringname,Stringmessage){

this.name=name;

this.message=message;

}

publicIntegergetId(){

returnid;

}

publicvoidsetId(Integerid){

this.id=id;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicStringgetMessage(){

returnmessage;

}

publicvoidsetMessage(Stringmessage){

this.message=message;

}

}

-------------Emp2.hbm.xml

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEhibernate-mappingPUBLIC

"-//Hibernate/HibernateMappingDTD3.0//EN"

"

-------------------------------------------------------

packageutil;

importjava.util.HashSet;

importjava.util.Set;

publicclassRoom2{

privateIntegerid;

privateStringname;

privateStringaddress;

privateSetemps=newHashSet();

publicRoom2(){

}

publicRoom2(Stringname,Stringaddress,Setemps){

this.name=name;

this.address=address;

this.emps=emps;

}

publicIntegergetId(){

returnid;

}

publicvoidsetId(Integerid){

this.id=id;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicStringgetAddress(){

returnaddress;

}

publicvoidsetAddress(Stringaddress){

this.address=address;

}

publicSetgetEmps(){

returnemps;

}

publicvoidsetEmps(Setemps){

this.emps=emps;

}

}

-------------------------Room2.hbm.xml

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEhibernate-mappingPUBLIC

"-//Hibernate/HibernateMappingDTD3.0//EN"

"

--外键可以为空,not-null="true"最好不要限制,

Rid是emp表中,注意外键不唯一-->

-------------------------------

SignalOntToMany.java

packagedeal;

importorg.hibernate.Session;

importorg.hibernate.Transaction;

importutil.Emp2;

importutil.HibernateSessionFactory;

importutil.Room2;

publicclassSignalOneToMany{

privatestaticSessionsession;

privatestaticTransactionts;

publicstaticvoidmain(String[]args){

//应先插入父表

Room2r2=newRoom2();

r2.setName("liu");

r2.setAddress("beijing");

//对于是集合的插入方法

r2.getEmps().add(newEmp2("kk1","helo"));

r2.getEmps().add(newEmp2("kk2","helo"));

r2.getEmps().add(newEmp2("kk3","helo"));

saveSignalOneToMany(r2);

}

publicstaticvoidsaveSignalOneToMany(Room2r2){

//TODOAuto-generatedmethodstub

session=HibernateSessionFactory.getSession();

ts=session.beginTransaction();

session.save(r2);

mit();

session.close();

}

}

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 初中作文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1