接前文在Hibernate中配置一对多连接表
其中表roomusers更改如下:
 create table ROOMUSERS(
create table ROOMUSERS(
 USERID NUMBER(4),
       USERID NUMBER(4),
 ROOMID NUMBER(4) not null
       ROOMID NUMBER(4) not null
 );
);
映射文件配置如下:
Room.hbm.xml
 <?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 <!--
<!-- 
 Mapping file autogenerated by MyEclipse Persistence Tools
    Mapping file autogenerated by MyEclipse Persistence Tools
 -->
-->
 <hibernate-mapping package="com.cosmow.hibernatedemo2.entity">
<hibernate-mapping package="com.cosmow.hibernatedemo2.entity">
 <class name="Room" table="ROOM" schema="STORE">
    <class name="Room" table="ROOM" schema="STORE">
 <id name="id" type="java.lang.Long">
        <id name="id" type="java.lang.Long">
 <column name="ID" precision="4" scale="0" />
            <column name="ID" precision="4" scale="0" />
 <!-- Oracle数据库增长方式序列 -->
            <!-- Oracle数据库增长方式序列 -->
 <generator class="sequence">
            <generator class="sequence">
 <param name="sequence">ROOM_SEQ</param>
                <param name="sequence">ROOM_SEQ</param>
 </generator>
            </generator>
 </id>
        </id>
 <!-- 映射roomnumber属性 -->
        <!-- 映射roomnumber属性 -->
 <property name="roomnumber" type="java.lang.String">
        <property name="roomnumber" type="java.lang.String">
 <column name="ROOMNUMBER" length="11" not-null="true" />
            <column name="ROOMNUMBER" length="11" not-null="true" />
 </property>
        </property>
 <!-- 映射name属性 -->
        <!-- 映射name属性 -->
 <property name="name" type="java.lang.String">
        <property name="name" type="java.lang.String">
 <column name="NAME" length="32" not-null="true" />
            <column name="NAME" length="32" not-null="true" />
 </property>
        </property>
 <!-- 通过连接表的多端,因此需要table属性为roomusers -->
        <!-- 通过连接表的多端,因此需要table属性为roomusers -->
 <set name="users" cascade="all" table="roomusers">
        <set name="users" cascade="all" table="roomusers">
 <!-- 该key的字段为连接表中的字段,作为外键 -->
            <!-- 该key的字段为连接表中的字段,作为外键 -->
 <key column="roomid" />
            <key column="roomid" />
 <!-- 配置多对多 -->
            <!-- 配置多对多 -->
 <many-to-many class="Userinfo" column="userid" />
            <many-to-many class="Userinfo" column="userid" />
 </set>
        </set>
 </class>
    </class>
 </hibernate-mapping>
</hibernate-mapping>
 
Userinfo.hbm.xml
 <?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 <!--
<!-- 
 Mapping file autogenerated by MyEclipse Persistence Tools
    Mapping file autogenerated by MyEclipse Persistence Tools
 -->
-->
 <hibernate-mapping package="com.cosmow.hibernatedemo2.entity">
<hibernate-mapping package="com.cosmow.hibernatedemo2.entity">
 <class name="Userinfo" table="USERINFO" schema="STORE">
    <class name="Userinfo" table="USERINFO" schema="STORE">
 <id name="id" type="java.lang.Long">
        <id name="id" type="java.lang.Long">
 <column name="ID" precision="4" scale="0" />
            <column name="ID" precision="4" scale="0" />
 <!-- Oracle数据库增长方式序列 -->
            <!-- Oracle数据库增长方式序列 -->
 <generator class="sequence">
            <generator class="sequence">
 <param name="sequence">USERINFO_SEQ</param>
                <param name="sequence">USERINFO_SEQ</param>
 </generator>
            </generator>
 </id>
        </id>
 <property name="name" type="java.lang.String">
        <property name="name" type="java.lang.String">
 <column name="NAME" length="32" not-null="true" />
            <column name="NAME" length="32" not-null="true" />
 </property>
        </property>
 <property name="sex" type="java.lang.String">
        <property name="sex" type="java.lang.String">
 <column name="SEX" length="2" />
            <column name="SEX" length="2" />
 </property>
        </property>
 <set name="rooms" cascade="all" table="roomusers">
        <set name="rooms" cascade="all" table="roomusers">
 <key column="userid" />
            <key column="userid" />
 <many-to-many class="Room" column="roomid" />
            <many-to-many class="Room" column="roomid" />
 </set>
        </set>
 </class>
    </class>
 </hibernate-mapping>
</hibernate-mapping>
 
测试代码如下:
 /**
/**
 * Demo.java
 * Demo.java
 *
 *
 * Copyright 2008. All Rights Reserved.
 * Copyright 2008. All Rights Reserved.
 */
 */
 package com.cosmow.hibernatedemo2.demo;
package com.cosmow.hibernatedemo2.demo;

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

 import org.hibernate.Session;
import org.hibernate.Session;
 import org.hibernate.Transaction;
import org.hibernate.Transaction;

 import com.cosmow.HibernateSessionFactory;
import com.cosmow.HibernateSessionFactory;
 import com.cosmow.hibernatedemo2.entity.Room;
import com.cosmow.hibernatedemo2.entity.Room;
 import com.cosmow.hibernatedemo2.entity.Userinfo;
import com.cosmow.hibernatedemo2.entity.Userinfo;

 /**
/**
 * TODO
 * TODO
 *
 * 
 * Revision History
 * Revision History
 *
 *
 * 2008-7-11,Cosmo,created it
 * 2008-7-11,Cosmo,created it
 */
 */
 public class Demo {
public class Demo {
 
    
 public void test() {
    public void test() { 
 //第一个room实体
        //第一个room实体
 Room room = new Room();
        Room room = new Room();
 room.setName("cosmoHome");
        room.setName("cosmoHome");
 room.setRoomnumber("001");
        room.setRoomnumber("001");
 
        
 //第二个room实体
        //第二个room实体
 Room room2 = new Room();
        Room room2 = new Room();
 room2.setName("Home2");
        room2.setName("Home2");
 room2.setRoomnumber("002");
        room2.setRoomnumber("002");

 //第一个user实体
        //第一个user实体
 Userinfo user = new Userinfo();
        Userinfo user = new Userinfo();
 user.setName("cosmo");
        user.setName("cosmo");
 user.setSex("M");
        user.setSex("M");
 
        
 //第二个user实体
        //第二个user实体
 Userinfo user2 = new Userinfo();
        Userinfo user2 = new Userinfo();
 user2.setName("winnie");
        user2.setName("winnie");
 user2.setSex("F");
        user2.setSex("F");

 //创建第二个user实体与第二个room实体的关系,通过连接表维护关系
        //创建第二个user实体与第二个room实体的关系,通过连接表维护关系
 Set<Room> roomSet = new HashSet<Room>();
        Set<Room> roomSet = new HashSet<Room>();
 roomSet.add(room2);
        roomSet.add(room2);
 user2.setRooms(roomSet);
        user2.setRooms(roomSet);
 
        
 //创建第一个room实体与第一、第二个user实体的关系,通过连接表维护关系
        //创建第一个room实体与第一、第二个user实体的关系,通过连接表维护关系
 //添加user实体到集合userSet
        //添加user实体到集合userSet
 Set<Userinfo> userSet = new HashSet<Userinfo>();
        Set<Userinfo> userSet = new HashSet<Userinfo>();
 userSet.add(user);
        userSet.add(user);
 userSet.add(user2);
        userSet.add(user2);
 room.setUsers(userSet);
        room.setUsers(userSet);

 // 启动Session
        // 启动Session
 Session session = HibernateSessionFactory.getSession();
        Session session = HibernateSessionFactory.getSession();
 // 启动事务
        // 启动事务
 Transaction tx = session.beginTransaction();
        Transaction tx = session.beginTransaction();
 // 持久化room实体
        // 持久化room实体
 //此时将更新表room和userinfo以及维护关系的roomusers表
        //此时将更新表room和userinfo以及维护关系的roomusers表
 session.save(room);
        session.save(room);
 tx.commit();
        tx.commit();
 HibernateSessionFactory.closeSession();
        HibernateSessionFactory.closeSession();
 
        
 // 启动Session
        // 启动Session
 session = HibernateSessionFactory.getSession();
        session = HibernateSessionFactory.getSession();
 // 启动事务
        // 启动事务
 tx = session.beginTransaction();
        tx = session.beginTransaction();
 
        
 //获取Room实体以成为持久化状态,此时将获取room表的所有字段信息
        //获取Room实体以成为持久化状态,此时将获取room表的所有字段信息
 Room roomF1 = (Room)session.get(Room.class, room.getId());
        Room roomF1 = (Room)session.get(Room.class, room.getId());
 
        
 //通过外连接roomusers获取userinfo表对应字段信息
        //通过外连接roomusers获取userinfo表对应字段信息
 Iterator<Userinfo> iF1 = roomF1.getUsers().iterator();
        Iterator<Userinfo> iF1 = roomF1.getUsers().iterator();
 while(iF1.hasNext()) {
        while(iF1.hasNext()) { 
 Userinfo userF = iF1.next();
            Userinfo userF = iF1.next();
 System.out.println(userF.getId());
            System.out.println(userF.getId());
 System.out.println(userF.getName());
            System.out.println(userF.getName());
 System.out.println(userF.getSex());
            System.out.println(userF.getSex());
 }
        }
 
        
 Room roomF2 = (Room)session.get(Room.class, room2.getId());
        Room roomF2 = (Room)session.get(Room.class, room2.getId());
 
        
 Iterator<Userinfo> iF2 = roomF2.getUsers().iterator();
        Iterator<Userinfo> iF2 = roomF2.getUsers().iterator();
 while(iF1.hasNext()) {
        while(iF1.hasNext()) { 
 Userinfo userF = iF2.next();
            Userinfo userF = iF2.next();
 System.out.println(userF.getId());
            System.out.println(userF.getId());
 System.out.println(userF.getName());
            System.out.println(userF.getName());
 System.out.println(userF.getSex());
            System.out.println(userF.getSex());
 }
        }
 
        
 tx.commit();
        tx.commit();
 HibernateSessionFactory.closeSession();
        HibernateSessionFactory.closeSession();
 }
    }

 public static void main(String[] args) {
    public static void main(String[] args) {
 Demo demo = new Demo();
        Demo demo = new Demo();
 demo.test();
        demo.test();
 }
    }

 }
}
 
其中表roomusers更改如下:
 create table ROOMUSERS(
create table ROOMUSERS( USERID NUMBER(4),
       USERID NUMBER(4), ROOMID NUMBER(4) not null
       ROOMID NUMBER(4) not null );
);映射文件配置如下:
Room.hbm.xml
 <?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!--
<!--  Mapping file autogenerated by MyEclipse Persistence Tools
    Mapping file autogenerated by MyEclipse Persistence Tools -->
--> <hibernate-mapping package="com.cosmow.hibernatedemo2.entity">
<hibernate-mapping package="com.cosmow.hibernatedemo2.entity"> <class name="Room" table="ROOM" schema="STORE">
    <class name="Room" table="ROOM" schema="STORE"> <id name="id" type="java.lang.Long">
        <id name="id" type="java.lang.Long"> <column name="ID" precision="4" scale="0" />
            <column name="ID" precision="4" scale="0" /> <!-- Oracle数据库增长方式序列 -->
            <!-- Oracle数据库增长方式序列 --> <generator class="sequence">
            <generator class="sequence"> <param name="sequence">ROOM_SEQ</param>
                <param name="sequence">ROOM_SEQ</param> </generator>
            </generator> </id>
        </id> <!-- 映射roomnumber属性 -->
        <!-- 映射roomnumber属性 --> <property name="roomnumber" type="java.lang.String">
        <property name="roomnumber" type="java.lang.String"> <column name="ROOMNUMBER" length="11" not-null="true" />
            <column name="ROOMNUMBER" length="11" not-null="true" /> </property>
        </property> <!-- 映射name属性 -->
        <!-- 映射name属性 --> <property name="name" type="java.lang.String">
        <property name="name" type="java.lang.String"> <column name="NAME" length="32" not-null="true" />
            <column name="NAME" length="32" not-null="true" /> </property>
        </property> <!-- 通过连接表的多端,因此需要table属性为roomusers -->
        <!-- 通过连接表的多端,因此需要table属性为roomusers --> <set name="users" cascade="all" table="roomusers">
        <set name="users" cascade="all" table="roomusers"> <!-- 该key的字段为连接表中的字段,作为外键 -->
            <!-- 该key的字段为连接表中的字段,作为外键 --> <key column="roomid" />
            <key column="roomid" /> <!-- 配置多对多 -->
            <!-- 配置多对多 --> <many-to-many class="Userinfo" column="userid" />
            <many-to-many class="Userinfo" column="userid" /> </set>
        </set> </class>
    </class> </hibernate-mapping>
</hibernate-mapping>
Userinfo.hbm.xml
 <?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!--
<!--  Mapping file autogenerated by MyEclipse Persistence Tools
    Mapping file autogenerated by MyEclipse Persistence Tools -->
--> <hibernate-mapping package="com.cosmow.hibernatedemo2.entity">
<hibernate-mapping package="com.cosmow.hibernatedemo2.entity"> <class name="Userinfo" table="USERINFO" schema="STORE">
    <class name="Userinfo" table="USERINFO" schema="STORE"> <id name="id" type="java.lang.Long">
        <id name="id" type="java.lang.Long"> <column name="ID" precision="4" scale="0" />
            <column name="ID" precision="4" scale="0" /> <!-- Oracle数据库增长方式序列 -->
            <!-- Oracle数据库增长方式序列 --> <generator class="sequence">
            <generator class="sequence"> <param name="sequence">USERINFO_SEQ</param>
                <param name="sequence">USERINFO_SEQ</param> </generator>
            </generator> </id>
        </id> <property name="name" type="java.lang.String">
        <property name="name" type="java.lang.String"> <column name="NAME" length="32" not-null="true" />
            <column name="NAME" length="32" not-null="true" /> </property>
        </property> <property name="sex" type="java.lang.String">
        <property name="sex" type="java.lang.String"> <column name="SEX" length="2" />
            <column name="SEX" length="2" /> </property>
        </property> <set name="rooms" cascade="all" table="roomusers">
        <set name="rooms" cascade="all" table="roomusers"> <key column="userid" />
            <key column="userid" /> <many-to-many class="Room" column="roomid" />
            <many-to-many class="Room" column="roomid" /> </set>
        </set> </class>
    </class> </hibernate-mapping>
</hibernate-mapping>
测试代码如下:
 /**
/** * Demo.java
 * Demo.java *
 * * Copyright 2008. All Rights Reserved.
 * Copyright 2008. All Rights Reserved. */
 */ package com.cosmow.hibernatedemo2.demo;
package com.cosmow.hibernatedemo2.demo;
 import java.util.HashSet;
import java.util.HashSet; import java.util.Iterator;
import java.util.Iterator; import java.util.Set;
import java.util.Set;
 import org.hibernate.Session;
import org.hibernate.Session; import org.hibernate.Transaction;
import org.hibernate.Transaction;
 import com.cosmow.HibernateSessionFactory;
import com.cosmow.HibernateSessionFactory; import com.cosmow.hibernatedemo2.entity.Room;
import com.cosmow.hibernatedemo2.entity.Room; import com.cosmow.hibernatedemo2.entity.Userinfo;
import com.cosmow.hibernatedemo2.entity.Userinfo;
 /**
/** * TODO
 * TODO *
 *  * Revision History
 * Revision History *
 * * 2008-7-11,Cosmo,created it
 * 2008-7-11,Cosmo,created it */
 */ public class Demo {
public class Demo { 
     public void test() {
    public void test() {  //第一个room实体
        //第一个room实体 Room room = new Room();
        Room room = new Room(); room.setName("cosmoHome");
        room.setName("cosmoHome"); room.setRoomnumber("001");
        room.setRoomnumber("001"); 
         //第二个room实体
        //第二个room实体 Room room2 = new Room();
        Room room2 = new Room(); room2.setName("Home2");
        room2.setName("Home2"); room2.setRoomnumber("002");
        room2.setRoomnumber("002");
 //第一个user实体
        //第一个user实体 Userinfo user = new Userinfo();
        Userinfo user = new Userinfo(); user.setName("cosmo");
        user.setName("cosmo"); user.setSex("M");
        user.setSex("M"); 
         //第二个user实体
        //第二个user实体 Userinfo user2 = new Userinfo();
        Userinfo user2 = new Userinfo(); user2.setName("winnie");
        user2.setName("winnie"); user2.setSex("F");
        user2.setSex("F");
 //创建第二个user实体与第二个room实体的关系,通过连接表维护关系
        //创建第二个user实体与第二个room实体的关系,通过连接表维护关系 Set<Room> roomSet = new HashSet<Room>();
        Set<Room> roomSet = new HashSet<Room>(); roomSet.add(room2);
        roomSet.add(room2); user2.setRooms(roomSet);
        user2.setRooms(roomSet); 
         //创建第一个room实体与第一、第二个user实体的关系,通过连接表维护关系
        //创建第一个room实体与第一、第二个user实体的关系,通过连接表维护关系 //添加user实体到集合userSet
        //添加user实体到集合userSet Set<Userinfo> userSet = new HashSet<Userinfo>();
        Set<Userinfo> userSet = new HashSet<Userinfo>(); userSet.add(user);
        userSet.add(user); userSet.add(user2);
        userSet.add(user2); room.setUsers(userSet);
        room.setUsers(userSet);
 // 启动Session
        // 启动Session Session session = HibernateSessionFactory.getSession();
        Session session = HibernateSessionFactory.getSession(); // 启动事务
        // 启动事务 Transaction tx = session.beginTransaction();
        Transaction tx = session.beginTransaction(); // 持久化room实体
        // 持久化room实体 //此时将更新表room和userinfo以及维护关系的roomusers表
        //此时将更新表room和userinfo以及维护关系的roomusers表 session.save(room);
        session.save(room); tx.commit();
        tx.commit(); HibernateSessionFactory.closeSession();
        HibernateSessionFactory.closeSession(); 
         // 启动Session
        // 启动Session session = HibernateSessionFactory.getSession();
        session = HibernateSessionFactory.getSession(); // 启动事务
        // 启动事务 tx = session.beginTransaction();
        tx = session.beginTransaction(); 
         //获取Room实体以成为持久化状态,此时将获取room表的所有字段信息
        //获取Room实体以成为持久化状态,此时将获取room表的所有字段信息 Room roomF1 = (Room)session.get(Room.class, room.getId());
        Room roomF1 = (Room)session.get(Room.class, room.getId()); 
         //通过外连接roomusers获取userinfo表对应字段信息
        //通过外连接roomusers获取userinfo表对应字段信息 Iterator<Userinfo> iF1 = roomF1.getUsers().iterator();
        Iterator<Userinfo> iF1 = roomF1.getUsers().iterator(); while(iF1.hasNext()) {
        while(iF1.hasNext()) {  Userinfo userF = iF1.next();
            Userinfo userF = iF1.next(); System.out.println(userF.getId());
            System.out.println(userF.getId()); System.out.println(userF.getName());
            System.out.println(userF.getName()); System.out.println(userF.getSex());
            System.out.println(userF.getSex()); }
        } 
         Room roomF2 = (Room)session.get(Room.class, room2.getId());
        Room roomF2 = (Room)session.get(Room.class, room2.getId()); 
         Iterator<Userinfo> iF2 = roomF2.getUsers().iterator();
        Iterator<Userinfo> iF2 = roomF2.getUsers().iterator(); while(iF1.hasNext()) {
        while(iF1.hasNext()) {  Userinfo userF = iF2.next();
            Userinfo userF = iF2.next(); System.out.println(userF.getId());
            System.out.println(userF.getId()); System.out.println(userF.getName());
            System.out.println(userF.getName()); System.out.println(userF.getSex());
            System.out.println(userF.getSex()); }
        } 
         tx.commit();
        tx.commit(); HibernateSessionFactory.closeSession();
        HibernateSessionFactory.closeSession(); }
    }
 public static void main(String[] args) {
    public static void main(String[] args) { Demo demo = new Demo();
        Demo demo = new Demo(); demo.test();
        demo.test(); }
    }
 }
}
 
                    
                 



 
     
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号