zoukankan      html  css  js  c++  java
  • 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.注意映射文件的配置。

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

  • 相关阅读:
    makefile ifeq ($(LANG),) 判断操作系统
    MIPS 指令集速查
    ps ef|grep mh* 命令
    ulimit c unlimited 命令
    kill 9 2402 命令
    chmod R 777 命令
    计算机网络总结
    source 命令
    ./ 命令
    reboot f 命令
  • 原文地址:https://www.cnblogs.com/zitt/p/5076098.html
Copyright © 2011-2022 走看看