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

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 楼 zan2222 2010-09-15  
Hibernate 3多对多单向连接表联系关系简单示例 Hibernate 3多对多单向连接表联系关系简单示例 Hibernate 3多对多单向连接表联系关系简单示例 Hibernate 3多对多单向连接表联系关系简单示例 Hibernate 3多对多单向连接表联系关系简单示例 Hibernate 3多对多单向连接表联系关系简单示例 Hibernate 3多对多单向连接表联系关系简单示例 Hibernate 3多对多单向连接表联系关系简单示例 Hibernate 3多对多单向连接表联系关系简单示例 Hibernate 3多对多单向连接表联系关系简单示例 Hibernate 3多对多单向连接表联系关系简单示例 Hibernate 3多对多单向连接表联系关系简单示例 Hibernate 3多对多单向连接表联系关系简单示例 Hibernate 3多对多单向连接表联系关系简单示例 Hibernate 3多对多单向连接表联系关系简单示例 Hibernate 3多对多单向连接表联系关系简单示例 Hibernate 3多对多单向连接表联系关系简单示例 Hibernate 3多对多单向连接表联系关系简单示例 Hibernate 3多对多单向连接表联系关系简单示例 Hibernate 3多对多单向连接表联系关系简单示例