继续上一节,上一节我们建立了person-event的一对多关联,要在此基础上建立他们的多对多关联只需在event端建立一个
event-person的一对多关联即可。所以我们只需改动Event.java和映射文件event.hbm.xml
Event.java
package com.hb.jo;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
public class Event {
private long id;
private String title;
private Date date;
private Set<Person> persons = new HashSet<Person>();
public Set<Person> getPersons() {
return persons;
}
public void setPersons(Set<Person> persons) {
this.persons = persons;
}
//因为hibernate通过java的反射机制创建对象,所以必须提供无参的构造
public Event()
{
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
event.hbm.xml
<?xml version="1.0"?>
<!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.hb.jo.Event" table="Events">
<id name="id" column="event_id">
<generator class="native"></generator>
</id>
<property name="date" type="timestamp" column="Date"></property>
<property name="title" column="Title"></property>
<set name="persons" table="Person_Events" inverse="true">
<key column="event_id"></key>
<many-to-many column="person_id" class="com.hb.jo.Person"></many-to-many>
</set>
</class>
</hibernate-mapping>
关于inverse = 'true'的解释:
hibernate api 写道
对于你和Java来说,一个双向关联仅仅是在两端简单地正确设置引用。然而,Hibernate并没有足够的信息去正确地执行INSERT和UPDATE语句(以避免违反数据库约束),所以它需要一些帮助来正确的处理双向关联。把关联的一端设置为inverse将告诉Hibernate忽略关联的这一端,把这端看成是另外一端的一个镜象(mirror)。这就是所需的全部信息,Hibernate利用这些信息来处理把一个有向导航模型转移到数据库schema时的所有问题。你只需要记住这个直观的规则:所有的双向关联需要有一端被设置为inverse。在一对多关联中它必须是代表多(many)的那端。而在多对多(many-to-many)关联中,你可以任意选取一端,因为两端之间并没有差别。
分享到:
相关推荐
多对多双向关联 <br>注意映射规则: <set name="roles" table="t_user_role"> <key column="userid"/><br> <many-to-many class="com.bjsxt.hibernate.Role" column="roleid"/> </set> <br>table...
在Hibernate的一对多关联中,双向关联意味着双方都可以通过导航属性访问对方。例如,用户类(User)可以有一个订单集合(Orders),而订单类(Order)同样有一个用户属性(User)。这样设计的好处在于,我们可以在任一侧轻松...
在Java的持久化框架Hibernate中,双向一对多关联映射是一种常见的关系映射方式,它模拟了数据库中的外键关联,使得一个实体可以拥有多个另一个实体的实例。在这个注解版的实现中,我们将深入探讨如何使用Hibernate的...
“Hibernate 一对多,多对一,一对多双向关联”是指在Java持久化框架Hibernate中,实体间常见的三种关联关系。在数据库设计中,这种关联关系是常见的,例如一个用户可以有多个订单(一对多),一个订单对应一个用户...
在这个“Hibernate一对多双向自身关联demo代码”中,我们将深入理解如何实现一个实体类与其自身进行一对多的双向关联。这种关联在实际应用中常见于例如用户的朋友关系、员工的上下级关系等场景。 首先,让我们了解...
本主题将深入探讨如何使用Hibernate实现一对一双向关联关系,并通过源码解析这一过程。 一对一双向关联关系指的是两个实体类之间存在一对一的关系,且在各自的类中都可以直接访问对方。这种关联可以通过注解或XML...
“Hibernate ORM - 一对多双向连接表关联关系”这个标题指出我们要讨论的是Hibernate ORM框架中的一种特定数据库关联模型,即一对多的双向关联。在Hibernate中,ORM(对象关系映射)是一种技术,它允许我们用面向...
为了使双向关联正常工作,还需要在Java代码中进行相应的设置。例如,在创建新订单时,不仅要设置订单的用户属性,也要在用户对象的订单集合中添加该订单: ```java User user = new User(); Order order = new ...
首先,我们来看如何在Java中使用JPA(Java Persistence API)或Hibernate(一个流行的JPA实现)来设置多对多双向关联。双向关联意味着两个实体类都将持有对彼此的引用。例如,考虑一个“学生”和“课程”的场景,每...
本主题将深入探讨使用Hibernate进行多对多双向关联的实现,既可以通过注解(Annotation)方式,也可以通过XML配置文件来完成。 首先,我们来看多对多关联的基本概念。在数据库设计中,当两个实体之间存在多个实例...
在双向关联下,`Student`类将有一个`courses`集合,而`Course`类将有一个`students`集合。 配置双向多对多关联映射主要涉及以下几个方面: 1. **实体类定义**:每个实体类需要声明一个集合属性,类型为对方的实体...
本篇文章将详细探讨如何实现Hibernate中的一对一主键关联映射,并以双向关联为例进行解析。 在一对一主键关联映射中,两个实体共享同一个主键,这表示它们在数据库中的记录是唯一的,不可重复。这种映射方式可以...
本篇将深入探讨Hibernate中的一对一唯一外键关联映射,特别是双向关联的实现。 ### 1. 一对一关联概述 一对一关联意味着一个实体只能与另一个实体的单一实例相关联,这种关系通常出现在两个表之间,其中一个表的...
9. Hibernate 一对一外键双向关联、主键双向关联、连接表双向关联、一对多外键双向关联、一对多连接表双向关联、多对多双向关联: 这些关联方式与单向关联类似,区别在于两个实体类都知道彼此的关联。在双向关联中...
双向关联提供了更方便的访问路径,但可能增加数据库操作的复杂性和内存占用。单向关联则相对简洁,但获取反向关系需要额外的查询。 总结,hibernate的一对多和多对一关联关系是通过在实体类中定义属性并配置相应的...
本篇将详细讲解如何在Hibernate中实现一对多的双向关联,并提供相关的代码示例。 在关系型数据库中,一对多关联是指一个表的记录可以对应另一个表的多个记录。在Hibernate中,这种关系可以通过在实体类和映射文件中...
在Hibernate中,多对多关联可以通过定义双向或单向的关联来实现。"单项关联"通常指的是只在一个实体类中定义了与另一个实体的关联,而在另一个实体类中没有对应的引用。这可以通过使用`@ManyToMany`注解来完成。 ...
本文主要关注Hibernate中的一个核心概念——一对一(One-to-One)、一对多(One-to-Many)和多对一(Many-to-One)关联映射,特别是关于“一到多”单向和双向关联映射的配置心得。 首先,让我们了解“一到多”关联...
在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者将数据库操作转换为...在实际开发中,应根据业务需求来决定是否使用双向关联,以及如何维护这种关系,以避免可能出现的数据不一致问题。