1.
模型
一个用户组(group)对应多个用户。
2.
实体类(省略set,get方法)
public class User {
private int id;
private String name;
}
public class Group {
private int id;
private String name;
private Set Users;
}
3.
数据模型
mysql> desc t_user;
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
| groupid | int(11) | YES | MUL | NULL | |
+---------+--------------+------+-----+---------+----------------+
mysql> desc t_group;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
4.
映射文件
一个用户组对应多个用户。
多对一关联映射:是在"多"的一端添加一个外键指向"一"的一端,它维护的关系为多到一的关系,如:当载入一个用户(user)时将载入组(group)的信息。
一对多关联映射:是在"多"的一端添加一个外键指向"一"的一端,它维护的关系为一到多的关系,如:当载入一个组(group)时将载入此组用户的信息。
可以说,一对多和多对一的映射策略是一致的,都是通过在"多"的一端添加一个外键指向"一"的一端,只是站的角度不同。
User.hbm.xml:
<hibernate-mapping>
<class name="com.dvnchina.hibernate.User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
Group.hbm.xml:
<hibernate-mapping>
<class name="com.dvnchina.hibernate.Group" table="t_group">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<!-- <set name="users" cascade="all">-->
<set name="users" order-by="name">
<key column="groupid"/>
<one-to-many class="com.dvnchina.hibernate.User"/>
</set>
</class>
</hibernate-mapping>
5.
测试
public class TestOneToMany extends TestCase {
public void testSave(){
Session session = HibernateUtils.getSession();
Transaction tx = session.beginTransaction();
Set<User> users = new HashSet<User>();
for(int i=0;i<9;i++){
User user = new User();
user.setName("yang"+i);
//session.save(user);
users.add(user);
}
//当user没有save,即为Transient对象,将抛出TransientObjectException
//因为持久对象不能直接引用瞬时对象,所以我们需要先save(user)使其为持久对象后
//再引用
Group group = new Group();
group.setName("凤山人在线");
group.setUsers(users);
session.save(group);
tx.commit();
HibernateUtils.closeSession(session);
}
public void testCascade(){
Session session = HibernateUtils.getSession();
Transaction tx = session.beginTransaction();
Set<User> users = new HashSet<User>();
for(int i=0;i<9;i++){
User user = new User();
user.setName("yang"+i);
users.add(user);
}
//在user.hbm.xml中的one-to-many中设置级联设置cascade="all",此时不需要使user
//为持久对象而可以直接使用它,因为save(group)时将级联保存user
Group group = new Group();
group.setName("凤山人在线");
group.setUsers(users);
session.save(group);
tx.commit();
HibernateUtils.closeSession(session);
}
//级联是对象之间的连锁操作(只对增删改起作用,对load不起作用,load是由one-to-many维护的)
public void testLoad(){
Session session = HibernateUtils.getSession();
Transaction tx = session.beginTransaction();
Group group = (Group) session.load(Group.class, 2);
Set list = group.getUsers();
for(Iterator ite = list.iterator();ite.hasNext();){
User user = (User) ite.next();
System.out.println(group.getName()+","+user.getName());
}
tx.commit();
HibernateUtils.closeSession(session);
}
}
分享到:
相关推荐
在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的关系映射方式之一,尤其在处理两个实体之间存在唯一对应关系时非常有用。本篇将重点讲解如何实现一对一主键关联映射的单向关联,并通过一个...
本话题主要探讨的是Hibernate中的一种关联映射方式——一对一(One-to-One)单向外键关联。这种关联模式通常用于两个实体之间存在唯一对应的关系,例如一个用户对应一个唯一的账户。 在Hibernate中,一对一关联可以...
在本篇关于MyBatis框架的学习中,我们将深入探讨一对一关联映射和一对多关联映射的概念、配置以及在实际开发中的应用。MyBatis是一个优秀的持久层框架,它允许开发者将SQL语句直接写在XML配置文件或者注解中,从而...
在数据库世界中,一对多(One-to-Many)关系是一种常见的关联类型,其中一个表(父表)可以与多个其他表(子表)相关联。在NHibernate中,配置这种映射关系对于理解和使用ORM至关重要。 一对多关系意味着一个实体...
在Java的持久化框架Hibernate中,一对多关联映射是一种常见的关系映射方式,它用于表示一个实体(如用户)可以拥有多个关联实体(如订单)。在这个场景中,"一"通常代表父实体,"多"代表子实体。这篇博客文章...
在数据库中,外键用于在两个表之间建立关联,而在单向一对一关联中,通常只在一个实体类中声明对另一个实体的引用,而另一个实体类并不知晓这个关联。 **详细知识点:** 1. **实体类与表的映射**:在Hibernate中,...
本练习主要关注的是Hibernate中的单向多对多关联映射,这是一种常见的关系数据库设计模式,用于表示两个实体间复杂的关系。 在多对多关联中,两个实体类可以相互拥有多个实例,但只在一个方向上建立关联。例如,...
在处理复杂的数据库关联关系时,比如一对一、一对多、多对一、多对多等,Mybatis提供了灵活的映射机制。本篇将详细讲解如何在Mybatis中实现一对多关联映射的查询操作。 首先,我们要明确一对多关联映射的基本概念。...
在Java的持久化框架Hibernate中,单向一对多关联映射是常见的数据关系处理方式,尤其是在处理数据库中的实体类和表之间的关系时。本主题主要关注如何使用注解来实现这种映射。Hibernate通过注解使得对象关系映射...
本篇主要探讨的是如何在Hibernate中实现一对多的单向关联映射。 一、概念理解 一对多关联意味着一个实体(如部门)可以有多个关联实体(如员工),而反过来,每个员工只属于一个部门。单向关联则表示只有部门知道其...
在实际的项目开发中,数据库中的表与表之间经常存在各种关联关系,比如一对一(One-to-One)、一对多(One-to-Many)和多对多(Many-to-Many)关系。本篇文章将重点讲解如何在 MyBatis 中实现一对一的关联映射。 一...
关联映射的本质: 将关联关系映射到数据库,所谓的...<many-to-one>会在多的一端加入一个外键,指向一的一端,这个外键是由<many-to-one> 中的column属性定义的,如果忽略了这个属性那么默认的外键与实体的属性一致
在Java的持久化框架Hibernate中,一对多关联映射是一种常见的关系映射方式,它用于表示一个实体(如用户)可以拥有多个子实体(如订单)的情况。在本篇文章中,我们将深入探讨如何实现双向关联的一对多映射,以及在...
压缩包中的`s2sh_relation07_many2one_uni`可能是示例项目的名称,暗示这是一个基于Spring、Struts2和Hibernate(S2SH)的项目,其中包含了多对一单向关联的实例代码。你可以下载并运行这个项目,以便更直观地理解...
关联映射主要包括四种类型:一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)和多对多(Many-to-Many)。下面我们将逐一探讨这些关联映射的配置方法。 1. **一对一关联映射** - **主键关联**...
在本主题"Hibernate单向一对多关联映射(XML版)"中,我们将深入探讨如何使用XML配置来实现数据库中一个实体类对应多个实体类的关联关系。 在Hibernate中,一对多关联是一种常见的关系映射类型,它反映了数据库中的...
在数据库设计中,Many to One是一种常见的关系,即一个实体(表)可以与多个其他实体相关联,而另一个实体则只与一个实体相关联。 首先,我们需要理解Hibernate的实体类和映射文件。实体类是Java对象,它们代表...
在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的关系数据库模型在对象模型中的体现。这种关联通常用于表示两个实体之间非常特殊的联系,比如一个人只有一个身份证,或者一个公司只有一个总部...
通过`hibernate_many2many_1`这个文件名推测,压缩包可能包含了示例代码或者配置文件,这些内容可以帮助读者更直观地理解多对多单向关联的实现过程。具体来说,可能包含如下内容: 1. `pom.xml`:Maven项目的配置...