多对多单向连接表关联:只要一个端有Set就可以了,在<set>的属性中指明POJO中的Set集合,对应的链接表名,子元素<key>声明本端对应的连接表中的主键,<many-to-many>声明对应的连接表中的另一端的主键及其对应的POJO类。
示例:
一个Person可以有多个Address,一个Address也可以有多个Person
POJO如下:
public class Addressnn implements java.io.Serializable{
private int addressid;
private String addressdetail;
public Addressnn(){
}
public Addressnn(String addressdetail){
this.addressdetail=addressdetail;
}
public void setAddressid(int addressid){
this.addressid=addressid;
}
public int getAddressid(){
return this.addressid;
}
public void setAddressdetail(String addressdetail){
this.addressdetail=addressdetail;
}
public String getAddressdetail(){
return this.addressdetail;
}
}
public class Personnn implements java.io.Serializable{
private int personid;
private String name;
private int age;
private java.util.Set addresses=new java.util.HashSet();
public void setPersonid(int personid){
this.personid=personid;
}
public int getPersonid(){
return this.personid;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public void setAge(int age){
this.age=age;
}
public int getAge(){
return this.age;
}
public void setAddresses(java.util.Set addresses){
this.addresses = addresses;
}
public void addAddress(Addressnn ad){
this.getAddresses().add(ad);
}
public java.util.Set getAddresses(){
return this.addresses;
}
}
hbm.xml如下:
<!--Personnn.hbm.xml-->
<hibernate-mapping>
<class name="com.Personnn" table="person_nn">
<id column="personid" name="personid" type="int">
<generator class="native"/>
</id>
<property name="name" column="name" type="string"/>
<property name="age" column="age" type="int"/>
<!--映射集合属性,join_nn是连接表表名-->
<set name="addresses" table="join_nn">
<key column="personid"/>
<many-to-many column="addressid" class="com.Addressnn"/>
</set>
</class>
</hibernate-mapping>
<!--Addressnn.hbm.xml-->
<hibernate-mapping>
<class name="com.Addressnn" table="address_nn">
<id column="addressid" name="addressid" type="int">
<generator class="native"/>
</id>
<property name="addressdetail" column="addressdetail" type="string"/>
</class>
</hibernate-mapping>
数据库表如下:
mysql> desc person_nn;
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra???? ?????|
+----------+--------------+------+-----+---------+----------------+
| personid | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+----------+--------------+------+-----+---------+----------------+
mysql> desc join_nn;
+-----------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+-------+
| personid | int(11) | NO | PRI | | |
| addressid | int(11) | NO | PRI | | |
+-----------+---------+------+-----+---------+-------+
mysql> desc person_nn;
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| personid | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+----------+--------------+------+-----+---------+----------------+
main测试:
public class Test_nn {
public static void main(String args[]){
Addressnn add1=new Addressnn();
Addressnn add2=new Addressnn();
Addressnn add3=new Addressnn();
Personnn p1=new Personnn();
Personnn p2=new Personnn();
add1.setAddressdetail("郑州市经三路");
add2.setAddressdetail("合肥市宿州路");
add3.setAddressdetail("北京市长安路");
p1.setName("wang");
p1.setAge(30);
p2.setName("lee");
p2.setAge(50);
p1.getAddresses().add(add1);
p1.getAddresses().add(add2);
p2.getAddresses().add(add2);
p2.getAddresses().add(add3);
Session session=HibernateUtil.getSession();
Transaction t=session.beginTransaction();
session.save(add1);
session.save(add2);
session.save(add3);
session.save(p2);
session.save(p1);
t.commit();
HibernateUtil.closeSession();
}
}
分享到:
相关推荐
本篇文章将详细讲解如何利用Hibernate的注解实现基于连接表的单向一对多关联。 首先,理解一对多关联:在数据库设计中,一对多关联意味着一个实体(表)可以与多个其他实体(表)相对应。例如,一个学生可以有多个...
本文将深入探讨Hibernate中的多对多单向关联,并结合提供的资源`hibernate_many2many_1`进行详细解析。 在数据库设计中,多对多关系意味着一个实体可以与多个其他实体相关联,反之亦然。例如,学生和课程之间的关系...
总的来说,这篇博客和相关代码示例为开发者提供了一个理解和实现Hibernate中多对多单向关联的起点,帮助他们更好地处理复杂的数据库关系映射。学习和实践这部分内容对于提升Java后端开发能力,特别是使用Hibernate...
本篇将详细讲解如何使用Hibernate进行一对一单向外键关联,并且该关联涉及到联合主键的注解配置。 首先,一对一关联可以分为两种类型:单向和双向。在单向一对一关联中,只有一个实体知道另一个实体的存在,而另一...
在这个“hibernate实例(一对多,多对一)”的主题中,我们将深入探讨两种重要的关联关系:一对一(One-to-One)和一对多(One-to-Many)。 **一对一关联(One-to-One)** 在一对一关联中,一个实体与另一个实体之间...
3. **多对多关联(Many-to-Many)**:多对多关联需要一个中间表来存储双方的关联信息,可以使用`@ManyToMany`注解,同时通过`@JoinTable`定义连接表的详细信息,包括连接字段和关联实体的引用。多对多关联的集合通常...
在多对多单向关联中,两个实体之间可以相互关联,这种关联通常通过第三个表(连接表或关联表)来实现。 **表结构示例**: - **Student表**: - `studentid`: 主键 - `name`: 姓名 - `age`: 年龄 - **Course表**:...
根据描述,本文将详细介绍Hibernate中的各种映射关系,包括单向和双向的关联,以及不同类型的关联方式如一对一、一对多、多对多等,以帮助初学者更好地理解和应用这些概念。 #### 二、关联映射类型 ##### 2.1 单向...
3. **多对一关联**:与一对多关联相反,使用`@ManyToOne`注解,多的一方没有`mappedBy`,而是直接引用一的一方。 4. **多对多关联**:使用`@ManyToMany`,需要一个中间表来存储两个实体类的关联关系,可以通过`@...
- 示例:`Person` 与 `Address` 之间的一对多关联。 - **处理关联** - 如何在对象图中导航关联。 - 示例:获取 `Person` 的地址列表。 - **值的集合** - 如何将多个相同类型的值映射到一个集合上。 - 示例:...
10. **多对一、一对多、多对多关联映射**:Hibernate3支持多种关联关系的映射,包括单向、双向、级联操作等,使得数据库关系模型能够完整地映射到对象模型。 通过这个"hibernate3.zip"压缩包,你可以获取到完整的...
- **关联映射**: 如何处理实体之间的关联关系,包括多对一、一对多、一对一等。 #### 总结 本篇文档提供了关于Hibernate框架的基础知识和深入实践的指导,适合初学者快速入门及进阶学习。通过这些知识点的学习,...
7.3. 使用连接表的单向关联(Unidirectional associations with join tables) 7.3.1. 一对多(one to many) 7.3.2. 多对一(many to one) 7.3.3. 一对一(one to one) 7.3.4. 多对多(many to many) 7.4. ...
9. **集合映射**:Hibernate支持一对多、多对一、一对一和多对多关系映射,使用`@OneToMany`, `@ManyToOne`, `@OneToOne`, `@ManyToMany` 注解实现。 10. **关联映射策略**:包括外键映射、单向和双向关联、懒加载...
《孙卫琴精通Hibernate Part3》是对知名数据库框架Hibernate深入探讨的系列教程的第三部分,主要涵盖的内容可能包括但不限于高级查询、性能优化、缓存策略、关联映射、多对多关系、一对多关系、一对一关系等核心主题...
- **7.5.1 一对多 (one to many)/多对一 (many to one)**:说明使用连接表的双向一对多/多对一关联映射。 - **7.5.2 一对一 (one to one)**:介绍使用连接表的双向一对一关联映射。 - **7.5.3 多对多 (many-to-...
- **一对多或多对一的**: 处理双向的一对多或多对一关联。 - **一对一**: 处理双向的一对一关联。 - **双向关联联接表**: 使用联接表处理双向关联。 #### 9. 组件映射 - **依赖对象**: 映射嵌套对象。 - **依赖...
- **多对多关联**: 多个实体之间通过中间表建立关联。 - **数据访问**: - **PO和VO**: - PO: 持久化对象,用于与数据库交互。 - VO: 值对象,用于业务逻辑处理。 - **其他特性**: - unsaved-value: 特殊标记,...
8. **集合映射**:解释如何处理一对多、一对一、多对多等关系映射,以及集合类型的特殊处理。 9. **关联映射**:涵盖不同类型的关联(如单向、双向、自关联)的配置和使用方法。 10. **事件和拦截器**:介绍如何...
7.3. 使用连接表的单向关联(Unidirectional associations with join tables) 7.3.1. 一对多(one to many) 7.3.2. 多对一(many to one) 7.3.3. 一对一(one to one) 7.3.4. 多对多(many to many) 7.4. ...