7hibernate级联关系.docx

上传人:b****5 文档编号:8305891 上传时间:2023-01-30 格式:DOCX 页数:11 大小:705.40KB
下载 相关 举报
7hibernate级联关系.docx_第1页
第1页 / 共11页
7hibernate级联关系.docx_第2页
第2页 / 共11页
7hibernate级联关系.docx_第3页
第3页 / 共11页
7hibernate级联关系.docx_第4页
第4页 / 共11页
7hibernate级联关系.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

7hibernate级联关系.docx

《7hibernate级联关系.docx》由会员分享,可在线阅读,更多相关《7hibernate级联关系.docx(11页珍藏版)》请在冰豆网上搜索。

7hibernate级联关系.docx

7hibernate级联关系

Hibernate关联

一对一关联

1.一对一关联关系,共享主键方式

需要在“多”的一方(主动方)的持久化类中声明一个“一”方(被动方)类型的属性。

操作步骤:

登录表和详细信息表属于典型的一对一关联关系,可按共享主键方式进行。

步骤如下:

①创建Java项目,命名为“Hibernate_mapping”。

②添加Hibernate开发能力,步骤同4.2.1节第4步。

HibernateSessionFactory类同样位于org.util包下。

③编写生成数据库表对应的Java类对象和映射文件。

[反向生成]

4.持有类对象的修改。

重新生成get,set方法。

5.ORM映射文件修改

Login.hbm.xml

Detail.hbm.xml

6.新建Test.java

publicstaticvoidmain(String[]args){

//TODOAuto-generatedmethodstub

Sessionsession=HibernateSessionFactory.getSession();

Transactionts=session.beginTransaction();//创建事务对象

Detaildetail=newDetail();

Loginlogin=newLogin();

login.setUsername("lupe2");

login.setPassword("123");

detail.setTruename("卢鹏");

detail.setEmail("yanhong@");

//相互设置关联

login.setDetail(detail);

detail.setLogin(login);

//这样完成后就可以通过Session对象调用session.save(detail)来持久化该对象

session.save(detail);

mit();

HibernateSessionFactory.closeSession();

}

}

7.运行测试结果:

2.一对一关联关系,唯一外键方式

(多对一的一种特殊情况)

步骤如下:

1.在项目Hibernate_mapping的org.model包下编写生成数据库表对应的Java类对象和映射文件。

重新生成get,set方法。

2.Person.hbm.xml文件修改:

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

>

DOCTYPEhibernate-mappingPUBLIC

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

"

column="room_id"//充当外键的字段名

class="org.model.Room"//被关联的类的名称

cascade="all"//主控类所有操作,对关联类也执行同样操作

unique="true"/>//唯一性约束,实现一对一

 

Room.hbm.xml:

 

3.编写测试代码。

在src文件夹下的包test的Test类中加入如下代码

 

3.多对一单向关联

【修改多(主控)的这边】

₪只要把上例中的一对一的唯一外键关联实例稍微修改就可以变成多对一。

【修改多(主控)的这边】步骤如下:

₪①在项目Hibernate_mapping的org.model包下编写生成数据库表对应的Java类对象和映射文件。

其对应表不变,Person表对应的类也不变,对应的Person.hbm.xml文件修改如下:

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

>

DOCTYPEhibernate-mappingPUBLIC

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

"

column="room_id"//充当外键的字段名

class="org.model.Room"//被关联的类的名称

cascade="all"/>//主控类所有操作,对关联类也执行同样操作

而Room表不变,对应的POJO类如下:

 

2.运行测试,发现在room类在完全没有操作数据库的情况下,程序就完成了对数据的插入

总结:

多对一关联,在反向生成实体类和映射文件后,只需修改多(主控)的这一方实体类和映射文件就可进行数据的操作。

4.一对多双向关联

如上面在多对一关联的基础上。

修改一的这方数据(room的实体类和映射文件)

修改room的实体类文件

 

修改room的映射文件

invers表示关联关系的维护工作由谁来负责,默认false,表示由主控方负责;true表示由被控方负责。

由于该例是双向操作,故需要设为false,也可不写。

 

编写测试代码

Personperson1=newPerson();

Personperson2=newPerson();

Roomroom=newRoom();

room.setAddress("NJ-S1-328");

person1.setName("李方方");

person2.setName("王艳");

person1.setRoom(room);

person2.setRoom(room);

//这样完成后就可以通过Session对象

//调用session.save(person1)和session.save(person)

//会自动保存room

session.save(person1);

session.save(person2);

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

当前位置:首页 > 高等教育 > 工学

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

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