zoukankan      html  css  js  c++  java
  • hibernate映射-单向n-n关联关系

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

    hibernate映射-多对多关联关系

       n-n关联必须使用连接表才能完成,

    一、代码示例:

    {类文件↓}

    Category.class

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

    Item.class

     1 package com.zit.hibernate.n2n;
     2 
     3 public class Item {
     4     
     5     private Integer id;
     6     private String name;
     7     
     8     public Integer getId() {
     9         return id;
    10     }
    11     public void setId(Integer id) {
    12         this.id = id;
    13     }
    14     public String getName() {
    15         return name;
    16     }
    17     public void setName(String name) {
    18         this.name = name;
    19     }
    20     
    21 }
    Item.class

    (单向n-n)

    {映射文件↓}

    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">
     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     </class>
    15 </hibernate-mapping>
    Item.hbm.xml

    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">
     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"></many-to-many>
    19         </set>
    20     </class>
    21 </hibernate-mapping>
    Category.hbm.xml

    在Category.hbm.xml中,

    1 <set name="items" table="CATEGORIES_ITEMS">
    2    <key>
    3       <column name="C_ID" />
    4    </key>
    5    <many-to-many class="Item" column="I_ID"></many-to-many>
    6 </set>

    这里的table指定中间表的名字,key 子元素,指定该中间表中参照CATEGORIES表的外键为C_ID.

    使用many-to-many时,class属性指定items集合中存放的是Item对象,column指定中间表中参照ITEMS表的外键

       名为  I_ID。

    (中间表未指定主键,那么两个属性联合起来作为主键。)

     

    二、使用注意:

    1.保存记录时,由于两个表并没有直接的联系,所以,先后保存哪一个数据,并没有直接的影响。但save记录时,需要同时操作中间表,所以,会相应的多出insert语句。

    2.查询时,有懒加载,在查询set<Item>的size时,会将 中间表与ITEMS表进行内连接查询。

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

  • 相关阅读:
    51 Nod 1086 多重背包问题(单调队列优化)
    51 Nod 1086 多重背包问题(二进制优化)
    51 Nod 1085 01背包问题
    poj 2559 Largest Rectangle(单调栈)
    51 Nod 1089 最长回文子串(Manacher算法)
    51 Nod N的阶乘的长度 (斯特林近似)
    51 Nod 1134 最长递增子序列(经典问题回顾)
    51 Nod 1020 逆序排列
    PCA-主成分分析(Principal components analysis)
    Python中cPickle
  • 原文地址:https://www.cnblogs.com/zitt/p/5075710.html
Copyright © 2011-2022 走看看