一对多实体映像
在前一个主题中,User对Room是多对一,反过来看,Room对User是一对多,一个Room可以给多个User住宿使用,我们的User类别这次设计如下:
User.java 的类的代码:
package onlyfun.caterpillar; public class User { private long id; private String name; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
这次不在User中包括Room属性,我们在Room类别中使用Set来储存User,表示一个Room中所住宿的使用者:
Room.java
package onlyfun.caterpillar; import java.util.*; public class Room { private long id; private String address; private Set users = new HashSet(); public long getId() { return id; } public void setId(long id) { this.id = id; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public Set getUsers() { return users; } public void setUsers(Set users) { this.users = users; } }
关于User的映射文件User.hbm.xml如下:
User.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> <hibernate-mapping> <class name="onlyfun.caterpillar.User" table="USER"> <id name="id" column="USER_ID"> <generator class="increment"/> </id> <property name="name"> <column name="NAME" length="16" not-null="true"/> </property> </class> </hibernate-mapping>
而Room的映射文件Room.hbm.xml如下,我们使用<set>来作集合映像,而在当中使用<one-to-many>来指定Room对User的一对多关系:
Room.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> <hibernate-mapping> <class name="onlyfun.caterpillar.Room" table="ROOM"> <id name="id" column="ROOM_ID"> <generator class="increment"/> </id> <property name="address" type="string"/> <set name="users" table="USER"> <key column="ROOM_ID"/> <one-to-many class="onlyfun.caterpillar.User"/> </set> </class> </hibernate-mapping>
我们使用下面这个程序来测试数据的储存:
HibernateTest.java
import onlyfun.caterpillar.*; import net.sf.hibernate.*; import net.sf.hibernate.cfg.*; public class HibernateTest { public static void main(String[] args) throws HibernateException { SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Room room = new Room(); room.setAddress("NTU-M8-419"); User user1 = new User(); user1.setName("bush"); User user2 = new User(); user2.setName("caterpillar"); room.getUsers().add(user1); room.getUsers().add(user2); Session session = sessionFactory.openSession(); Transaction tx= session.beginTransaction(); session.save(user1); session.save(user2); session.save(room); tx.commit(); session.close(); sessionFactory.close(); } }
看看数据库中实际储存的内容:
mysql> select * from USER;
+---------+-------------+---------+
| USER_ID | NAME | ROOM_ID |
+---------+-------------+---------+
| 1 | bush | 1 |
| 2 | caterpillar | 1 |
+---------+-------------+---------+
2 rows in set (0.00 sec)
mysql> select * from ROOM;
+---------+------------+
| ROOM_ID | address |
+---------+------------+
| 1 | NTU-M8-419 |
+---------+------------+
1 row in set (0.00 sec)
在这边我们先引出两个主题,第一是每次我们都用save()储存所有的暂存对象吗?事实上我们只要透用Hibernate的「可达性」,上面的三行 save(),就可以简化只save(room),而其所含的user1、user2也会自动储存。第二是User与Room之间的关系我们到现在都只设计单向的,事实上我们会可以设计它们之间的双向关联。
这两个主题都值得独立一个探讨,之后将会介绍。
相关推荐
在这个“hibernate学习入门之一对多实体映射源码”教程中,我们将深入探讨如何在Hibernate中设置和管理一对多的关系。 一、Hibernate简介 Hibernate是Java开发人员用于处理数据库操作的强大工具,通过它,我们可以...
本教程将带你入门Hibernate的多对多实体映射,帮助你理解如何通过源码来实现这种复杂的关系映射。 一、Hibernate概述 Hibernate是一个对象关系映射(ORM)框架,它允许我们将Java对象(实体)与数据库表进行映射,...
SessionFactory 对象是 Hibernate 的核心组件之一。 Hibernate 的优点 Hibernate 有很多优点,它可以帮助开发者快速地访问和操作数据库。下面是 Hibernate 的一些优点: * 简洁高效:Hibernate 提供了一种简洁...
本压缩包提供的是Hibernate入门所需的jar包,包括了Hibernate的核心库以及与之配合使用的相关组件。让我们深入探讨一下这些jar包以及它们在Hibernate中的作用。 1. Hibernate核心库: - `hibernate-core.jar`:这...
**初学Hibernate,Hibernate入门** ...随着对Hibernate的深入学习,你会发现它还支持更高级的功能,如级联操作、多对一、一对多等复杂关系映射、缓存机制、延迟加载等,这些都将极大地提升你的开发效率。
【Hibernate入门案例源码】是针对初学者设计的一份教程,旨在帮助理解并掌握Java持久化框架Hibernate的基础应用。Hibernate是一个强大的ORM(对象关系映射)框架,它简化了数据库与Java对象之间的交互,使开发者可以...
总结来说,本教程涵盖了Hibernate的基础知识,从入门到实体映射,再到复合主键和实体层设计,旨在帮助初学者快速掌握Hibernate的使用,从而更高效地进行数据库操作。通过实践这些知识点,你将能够熟练地在Java应用中...
在这个“hibernate入门--第一个实例”中,我们将了解如何设置Hibernate环境,创建实体类,配置映射文件,以及执行基本的CRUD(创建、读取、更新和删除)操作。 1. **环境搭建** - **下载与安装**: 首先,你需要从...
【hibernate入门小例子】是一个适合初学者的教程,主要涵盖了如何在JavaWeb项目中使用Hibernate框架与MySQL数据库进行集成。在这个例子中,我们将会深入理解Hibernate的核心概念,包括实体映射、对象关系映射(ORM)...
本实例将深入探讨Hibernate中的三种基本关联关系:一对一(One-to-One)、一对多(One-to-Many)以及多对多(Many-to-Many)的实现方式。 1. **一对一关联**: 一对一关联通常出现在两个实体之间存在唯一对应关系...
最后,书中可能会涵盖一些高级主题,如多对一、一对多、多对多的关系映射,以及继承映射、复合组件、查询优化等。这些内容都是Hibernate深入学习的重点,对于理解和掌握复杂的数据模型以及高效的数据操作至关重要。 ...
### Hibernate入门知识点详解 #### Hibernate概述与ORM思想 - **定义**:Hibernate是一个开源的、轻量级的对象关系映射(Object-Relational Mapping,简称ORM)框架,它主要应用于JavaEE架构中的DAO(Data Access ...
Hibernate 支持多种对象关系映射,如一对一、一对多、多对一、多对多。例如,一个User可以有多个Order: ```xml <!-- User.hbm.xml --> <!-- Order.hbm.xml --> ``` 以上就是Hibernate入门的基础内容。...
本项目“hibernate一对多项目”旨在演示如何在JavaWeb应用中使用Hibernate处理一对多的关系映射。这里我们将深入探讨 Hibernate 的一对多关系、配置以及在实际项目中的应用。 首先,一对多关系在数据库中很常见,...
Hibernate支持一对一、一对多、多对一、多对多等各种关系映射,通过注解或XML配置文件定义。例如,一个用户可以有多个订单,订单也可以属于一个用户: ```java @Entity @Table(name = "Order") public class Order ...
**标题:“Hibernate双向一对多经典实例”** 在Java开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者能够用面向对象的方式处理数据。本实例将聚焦于Hibernate中的一对多关系...
一、Hibernate一对多关系 在现实世界中,一对多关系很常见,例如一个班级可以有多名学生。在数据库中,这对应于一个表(如班级表)有一条记录可以关联多条记录(如学生表)。在Hibernate中,我们通过配置XML文件来...
相比之下,Hibernate则更加自动化,能够根据实体类自动生成相应的SQL语句,进一步减少了开发者的负担。 通过上述知识点的学习,初学者可以更好地理解Hibernate的核心概念和技术优势,并逐步掌握其基本用法,为...
### Hibernate入门知识点详解 #### 一、环境搭建与配置 - **工程创建**:首先,创建一个名为`HibernateDemo`的Java工程,这是构建Hibernate应用的基础。为了使工程能够识别和运行Hibernate相关的代码,需要正确地...