hibernate映射-双向n-n关联关系

(学习记录,错误不足之处,请您耐心指正^_^)

hibernate映射-双向n-n关联关系

一、代码示例:

{类文件↓}

Category.class

package com.zit.hibernate.n2n.both;

import java.util.HashSet;
import java.util.Set;

public class Category {

    private Integer id;
    private String name;

    private Set<Item> items = new HashSet<>();

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Set<Item> getItems() {
        return items;
    }
    public void setItems(Set<Item> items) {
        this.items = items;
    }

}

Category.class

Item.class

 1 package com.zit.hibernate.n2n.both;
 2
 3 import java.util.HashSet;
 4 import java.util.Set;
 5
 6 public class Item {
 7
 8     private Integer id;
 9     private String name;
10
11     private Set<Category> categories = new HashSet<>();
12
13
14     public Set<Category> getCategories() {
15         return categories;
16     }
17     public void setCategories(Set<Category> categories) {
18         this.categories = categories;
19     }
20     public Integer getId() {
21         return id;
22     }
23     public void setId(Integer id) {
24         this.id = id;
25     }
26     public String getName() {
27         return name;
28     }
29     public void setName(String name) {
30         this.name = name;
31     }
32
33 }

Item.class

{映射文件↓}

Category.hbm.xml

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4 <!-- Generated 2015-12-25 13:55:35 by Hibernate Tools 3.4.0.CR1 -->
 5 <hibernate-mapping package="com.zit.hibernate.n2n.both">
 6     <class name="Category" table="CATEGORIES">
 7         <id name="id" type="java.lang.Integer">
 8             <column name="ID" />
 9             <generator class="native" />
10         </id>
11         <property name="name" type="java.lang.String">
12             <column name="NAME" />
13         </property>
14         <set name="items" table="CATEGORIES_ITEMS">
15             <key>
16                 <column name="C_ID" />
17             </key>
18             <many-to-many class="Item" column="I_ID">
19             </many-to-many>
20         </set>
21     </class>
22 </hibernate-mapping>

Category.hbm.xml

Item.hbm.xml

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4 <!-- Generated 2015-12-25 13:55:35 by Hibernate Tools 3.4.0.CR1 -->
 5 <hibernate-mapping package="com.zit.hibernate.n2n.both">
 6     <class name="Item" table="ITEMS">
 7         <id name="id" type="java.lang.Integer">
 8             <column name="ID" />
 9             <generator class="native" />
10         </id>
11         <property name="name" type="java.lang.String">
12             <column name="NAME" />
13         </property>
14
15         <set name="categories" table="CATEGORIES_ITEMS" inverse="true">
16             <key>
17                 <column name="I_ID"></column>
18             </key>
19             <many-to-many class="Category" column="C_ID">
20             </many-to-many>
21         </set>
22
23     </class>
24 </hibernate-mapping>

Item.hbm.xml

在Item与Category映射文件的配置中,两者应该交叉相同。如下:

 1 Category.hbm.xml
 2 <set name="items" table="CATEGORIES_ITEMS">
 3   <key>
 4     <column name="C_ID" />
 5   </key>
 6   <many-to-many class="Item" column="I_ID">
 7   </many-to-many>
 8 </set>
 9
10
11 Item.hbm.xml
12 <set name="categories" table="CATEGORIES_ITEMS" inverse="true">
13    <key>
14       <column name="I_ID"></column>
15    </key>
16    <many-to-many class="Category" column="C_ID">
17    </many-to-many>
18 </set>

(务必注意,双向多对多映射文件中,必须把其中一端的inverse设置为true,不让两端都维护关联关系,不然会造成主键冲突)

二、使用注意:

1.注意映射文件的配置。

(学习记录,错误不足之处,请您耐心指正^_^)

时间: 2024-08-28 13:38:07

hibernate映射-双向n-n关联关系的相关文章

hibernate映射-双向一对多映射

(当然双向1-n与双向n-1是完全相同的.) 双向1-n需要在1的一端访问n的一端,同时,n的一端也可以访问1的一端. 举例:Customer-Order 一.代码演示: {类文件↓} Customer: 1 import java.util.HashSet; 2 import java.util.Set; 3 4 public class Customer { 5 6 private Integer customerId; 7 private String customerName; 8 9

JPA学习笔记-映射双向一对一的关联关系

Manager类 @Table(name="jpa_manager") @Entity public class Manager { @GeneratedValue @Id private Integer id; @Column(name="manager_name") private String managerName; //没有外键的一方,不维护关联关系 // @OneToOne(mappedBy="manager", fetch=Fetc

JPA学习笔记(10)——映射双向多对多关联关系

多对多关联 比如现在有两个实体类:1. Product(商品)2. Category(类别) 一个商品可以有多个类别,一个类别也可以有多个商品,这就形成了多对多的关系 Product package com.jpa.helloworld2; import java.util.List; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue;

Hibernate映射多对多双向关联关系(小案例)

多对多双向关联关系(Project(工程)/Emp(员工)为案例): 步骤如下: 1.创建Project类,并需要定义集合类型的Emp属性 public class Project { //编号 private Integer pid; //名称 private String pname; //定义集合类型的Emp属性 private Set<Emp> emps=new HashSet<Emp>(); public Integer getPid() { return pid; }

hibernate映射的 关联关系:有 一对多关联关系,一对一关联关系,多对多关联关系,继承关系

hibernate环境配置:导包.... 单向n-1:单向 n-1 关联只需从 n 的一端可以访问 1 的一端 <many-to-one> 元素来映射组成关系: name: 设定待映射的持久化类的属性的名字 column: 设定和持久化类的属性对应的表的外键 class:设定待映射的持久化类的属性的类型 建立1所对应的封装类,这儿只写属性,setter和getter就不写了: private Integer customerId; private String customerName; 建立

SSH:Hibernate框架(七种关联关系映射及配置详解)

概念 基本映射是对一个实体进行映射,关联映射就是处理多个实体之间的关系,将关联关系映射到数据库中,所谓的关联关系在对象模型中有一个或多个引用. 分类 关联关系分为上述七种,但是由于相互之间有各种关系,可以简化,例如:多对一与一对多映射,只是侧重的角度不对而已. 映射技巧 映射技巧是小编写映射文件的过程,总结的经典内容,总共分为四步,咋看不是特别易懂,但是效果很好.下面我们以实例看技巧. (1)写注释 格式为:?属性,表达的是本对象与?的?关系. 解释:在写映射文件之前先写注释,将问号的地方填上相

10、JPA_映射双向多对多的关联关系

双向多对多的关联关系 双向多对多的关联关系(抽象成A-B)具体体现:A中有B的集合的引用,同时B中也有对A的集合的引用.A.B两个实体对应的数据表靠一张中间表来建立连接关系. 同时我们还知道,双向多对多的关联关系可以拆分成三张表,两个双向多对一关联关系.拆分以后还是有一张中间表,其好处就是可以在中间表中添加某些属性用作其它.这个后面会讲解.而单纯的双向多对多关联关系的中间表有两个外键列,无法增加其它属性. 本节只讲单纯的双向多对多关联关系.从例子讲解配置方法和原理: 有“商品Item”和“类别C

【SSH进阶之路】Hibernate映射——一对一双向关联映射(六)

上篇博文[SSH进阶之路]Hibernate映射--一对一单向关联映射(五),我们介绍了一对一的单向关联映射,单向是指只能从人(Person)这端加载身份证端(IdCard),但是反过来,不能从身份证端加载人得信息.如图所示: 关键原因在于对象模型具有方向性: 单向:一端只能加载另一端,不能反过来. 双向:两端都可以加载另一端. 问题来了:如何我们想从身份证端(IdCard)加载人(Person),怎么办呢? 下面我们开始介绍一对一的双向关联映射. 映射原理 双向关联映射与单向关联映射的原理是一

hibernate映射-基于主键映射的1-1关联关系

(学习记录,错误不足之处,请您耐心指正^_^) hibernate映射-基于主键映射的1-1关联关系 基于主键的映射策略:指一端的主键生成器使用foreign策略,表明根据对方的主键来生成自己的主键,自己并不独立生成主键. 一.代码示例: {类文件↓} Manager.class 1 package com.zit.hibernate.one2one.primary; 2 3 public class Manager { 4 5 private Integer mgrId; 6 private