`
mrzhangtufu
  • 浏览: 60500 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Hibernate 3多对多单向连接表关联简单示例

阅读更多

多对多单向连接表关联:只要一个端有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();
    }
}

 

1
0
分享到:
评论
1 楼 zan2222 2010-09-15  
                   

相关推荐

    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. ...

    HibernateAPI中文版.chm

    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. ...

    hibernate3.2中文文档(chm格式)

    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. ...

    Hibernate3+中文参考文档

    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. 双向...

    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. ...

    Hibernate 中文 html 帮助文档

    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. 双向...

    最全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. 双向...

    hibernate 体系结构与配置 参考文档(html)

    使用连接表的单向关联(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. 双向...

    Hibernate教程

    8.3. 使用连接表的单向关联(Unidirectional associations with join tables) 8.3.1. 一对多(one to many) 8.3.2. 多对一(many to one) 8.3.3. 一对一(one to one) 8.3.4. 多对多(many to many) 8.4. ...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    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. ...

    hibernate3.04中文文档.chm

    8.3. 使用连接表的单向关联(Unidirectional associations with join tables) 8.3.1. 一对多(one to many) 8.3.2. 多对一(many to one) 8.3.3. 一对一(one to one) 8.3.4. 多对多(many to many) 8.4. ...

    hibernate 框架详解

    使用连接表的单向关联(Unidirectional associations with join tables) 8.3.1. 一对多(one to many) 8.3.2. 多对一(many to one) 8.3.3. 一对一(one to one) 8.3.4. 多对多(many to many) 8.4. 双向...

    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. 双向...

    NHibernate中文文档

    值集合和多对多关联(Collections of Values and Many-To-Many Associations) 14 一对多关联(One-To-Many Associations) 14 延迟初始化(延迟加载)(Lazy Initialization) 14 集合排序(Sorted Collections) 14 使用 ...

    Spring面试题

    3.不用一对一,用多对一取代 4.配置对象缓存,不使用集合缓存 5.一对多集合使用Bag,多对多集合使用Set 6. 继承类使用显式多态 7. 表字段要少,表关联不要怕多,有二级缓存撑腰 7. Struts工作机制?为什么要使用...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    10.5.9 对关联实体进行排序 424 10.6 继承关系映射 426 10.6.1 整个类层次对应一张表的 映射策略 427 10.6.2 连接子类的映射策略 430 10.6.3 每个具体类对应一张表的 映射策略 434 10.7 使用抽象实体和非实体父类 ...

Global site tag (gtag.js) - Google Analytics