今天试着写了一个hibernate的关联映射,关系是一对多。
写了两个实体类,Group 和User。
Group.java文件:
package com.mp.hibernate;
public class Group {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
User.java文件:
package com.mp.hibernate;
import java.util.Date;
public class User {
private int id;
private String name;
private Group group;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Group getGroup() {
return group;
}
public void setGroup(Group group) {
this.group = group;
}
}
在这两个对象关系中通过User持有Group对象来表明两者之间的多对一的关系,那么如何来配置使得hibernet能认识他们的关系呢?
那么来看一下Group.hbm.xml和User.hbm.xml这两个文件如何来写吧:
Group.hbm.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!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.mp.hibernate.Group" table="t_group">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"></property>
</class>
</hibernate-mapping>
User.hbm.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!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.mp.hibernate.User" table="t_user">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"></property>
<many-to-one name="group" column="groupid"></many-to-one>
</class>
</hibernate-mapping>
其中在这里的核心配置就是
<many-to-one name="group" column="groupid"></many-to-one>
这个配置,首先它配置在User中就是 属于many 方面,它的name属性指明了one是谁,
这两个配置文件中对对象的table都重新命名主要是防止出错,由于User里面的group与Group对象名字相同。
写了一个测试方法来测试现在能否完成对象的保存:
public void testSave1() {
Session session = null;
User user = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
Group group = new Group();
group.setName("明星");
User u1 = new User();
u1.setName("刘德华");
u1.setGroup(group);
User u2 = new User();
u2.setName("陈小春");
u2.setGroup(group);
//仅保存user时不能成功保存,抛出TransientObjectException异常
//因为Group为Transient状态,O id没有分配值
//persistent状态对象是不能引用Transient状态的对象的
session.save(u1);
session.save(u2);
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
} finally {
HibernateUtils.closeSession(session);
}
}
用这个方法的的结果已经在代码中间的注释中说明了,这里就不再过多说明。
然后又在此基础上面添加了一句就是:
session.save(group);
这样就能看到效果了:
表中user 的id 是3 和 4 是由于第一次存储的时候出错了,已经自增过了。
这样算是成功了,但是感觉还不是那么完善似的,就看看还有没有其他的方法了
这时就想到数据的级联了,看看hibernate的配置中能不能配置级联关系呢?
答案是可以。
将<many-to-one name="group" column="groupid" ></many-to-one> 改为
<many-to-one name="group" column="groupid" cascade="all"></many-to-one>
cascade就是级联操作的意思,它主要级联sava 、update、delete操作。在这里本来是不能级联delete操作的,简单起见就把它的值定义成了all
然后还是用以前的那个没有加
session.save(group);的方法,看是不是能保存成功呢?
结果是这样的:
说明保存成功了。
完成时,在逻辑上面考虑了一下,觉得还是加上group 的save操作比较好,这样在逻辑上面也比较好理解。
- 大小: 48.5 KB
- 大小: 17.4 KB
分享到:
相关推荐
配置上,需要创建一个新的实体类来代表连接表,并在其中定义两个 `many-to-one` 属性,分别对应一对一关联的两个实体。 4. Hibernate 一对多外键单向关联: 在这种关联中,一个实体类(如 Department)可以有多个...
"Hibernate one-to-many / many-to-one关系映射"是两个基本的关系类型,用于表示实体间的关联。在这个主题中,我们将深入探讨这两种关系映射的原理、配置和实际应用。 一、一对一(one-to-one)与一对多(one-to-...
总的来说,这个压缩包提供了丰富的Hibernate关联映射的学习资源,涵盖了从基础到进阶的各种关联类型。通过学习这些示例,你将能够熟练掌握如何在Java项目中使用Hibernate进行数据持久化,并灵活地处理各种数据库关系...
### Hibernate关联映射的作用与常用属性详解 #### 关联映射概述 在对象关系映射(Object Relational Mapping,简称ORM)技术中,Hibernate作为Java领域内非常成熟且功能强大的框架之一,它允许开发者将Java类映射...
在Hibernate中,一对一唯一外键关联映射可以通过 `<many-to-one>` 标签来配置。例如,以下是Person实体与IdCard实体的一对一唯一外键关联映射配置: ```xml <many-to-one name="idCard" column="card_id...
本话题主要探讨两种基本的关系映射类型:many-to-one(多对一)和one-to-many(一对多)。这两种关系映射是数据库中常见的关联类型,理解和掌握它们对于开发高质量的Java应用至关重要。 1. many-to-one关系 many-to...
【hibernate关联映射详解】 Hibernate 是一款流行的Java持久层框架,用于简化数据库操作。在Hibernate中,关联映射是实现对象关系映射(ORM)的关键,它允许我们在对象模型和关系数据库之间建立联系。关联映射主要...
标题"Hibernate one to many(many to one) 配置"涉及到的是关系型数据库在Java中的持久化框架Hibernate中的两种关联映射关系:一对一(One-to-One)和多对一(Many-to-One)。在数据库设计中,这种关系很常见,例如...
"Hibernate的关联映射"是Hibernate中的核心概念之一,用于模拟数据库中的关系,包括一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)和多对多(Many-to-Many)四种关系。现在,让我们详细探讨...
在Java的持久化框架Hibernate中,"Many-to-One"关系是一种常见的关联映射类型,它表示一个实体(类)可以与多个其他实体实例相关联。在这个主题中,我们将深入探讨Hibernate如何处理这种关系,以及如何在实际编程中...
本示例将深入探讨 Hibernate 3.x 中的关联映射,以帮助开发者更好地理解和应用这一关键技术。 关联映射是Hibernate中的核心概念之一,它允许我们将数据库中的表关系映射到对象之间的关系。主要的关联类型有以下几种...
这可能是测试Hibernate关联映射的一个示例项目或者类。通常,这样的测试会包含各种关联映射的实例,如实体类的定义,配置文件或注解,以及测试用例,用于验证关联映射是否按预期工作。 **详细知识讲解:** 1. **一...
在Java的持久化框架Hibernate中,One-to-Many映射是一种常见的关系映射方式,它表示一个实体(比如一个用户)可以与多个其他实体(比如用户的订单)进行关联。在这个场景下,"用户"是一方,称为"One","订单"是另...
本实例将详细讲解如何在Hibernate中实现Many-to-One关系映射,这是一种常见的数据库关联,表示一个实体可以与多个其他实体相关联。 在Many-to-One关系中,通常一个实体(如部门)可以有多个相关实体(如员工),而...
"hibernate关联关系映射"是Hibernate的核心概念之一,它定义了如何在Java对象和数据库表之间建立关系。以下是对这个主题的详细讲解: 一、一对一关系映射(One-to-One) 一对一关系是指一个实体对应另一个实体的...
### Hibernate关联映射详解 #### 一、单向多对一映射 在单向多对一的关系中,主要是指“多方”实体依赖于“一方”实体,但是“一方”实体并不感知到“多方”的存在。 1. **数据库设计:**在多方的表中添加与一方...