在Hibernate中配置多对多连接表
2008-07-11 11:49
106 查看
接前文在Hibernate中配置一对多连接表
其中表roomusers更改如下:
create table ROOMUSERS(
USERID NUMBER(4),
ROOMID NUMBER(4) not null
);
映射文件配置如下:
Room.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping package="com.cosmow.hibernatedemo2.entity">
<class name="Room" table="ROOM" schema="STORE">
<id name="id" type="java.lang.Long">
<column name="ID" precision="4" scale="0" />
<!-- Oracle数据库增长方式序列 -->
<generator class="sequence">
<param name="sequence">ROOM_SEQ</param>
</generator>
</id>
<!-- 映射roomnumber属性 -->
<property name="roomnumber" type="java.lang.String">
<column name="ROOMNUMBER" length="11" not-null="true" />
</property>
<!-- 映射name属性 -->
<property name="name" type="java.lang.String">
<column name="NAME" length="32" not-null="true" />
</property>
<!-- 通过连接表的多端,因此需要table属性为roomusers -->
<set name="users" cascade="all" table="roomusers">
<!-- 该key的字段为连接表中的字段,作为外键 -->
<key column="roomid" />
<!-- 配置多对多 -->
<many-to-many class="Userinfo" column="userid" />
</set>
</class>
</hibernate-mapping>
Userinfo.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping package="com.cosmow.hibernatedemo2.entity">
<class name="Userinfo" table="USERINFO" schema="STORE">
<id name="id" type="java.lang.Long">
<column name="ID" precision="4" scale="0" />
<!-- Oracle数据库增长方式序列 -->
<generator class="sequence">
<param name="sequence">USERINFO_SEQ</param>
</generator>
</id>
<property name="name" type="java.lang.String">
<column name="NAME" length="32" not-null="true" />
</property>
<property name="sex" type="java.lang.String">
<column name="SEX" length="2" />
</property>
<set name="rooms" cascade="all" table="roomusers">
<key column="userid" />
<many-to-many class="Room" column="roomid" />
</set>
</class>
</hibernate-mapping>
测试代码如下:
package com.cosmow.hibernatedemo2.demo;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.cosmow.HibernateSessionFactory;
import com.cosmow.hibernatedemo2.entity.Room;
import com.cosmow.hibernatedemo2.entity.Userinfo;
其中表roomusers更改如下:
create table ROOMUSERS(
USERID NUMBER(4),
ROOMID NUMBER(4) not null
);
映射文件配置如下:
Room.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping package="com.cosmow.hibernatedemo2.entity">
<class name="Room" table="ROOM" schema="STORE">
<id name="id" type="java.lang.Long">
<column name="ID" precision="4" scale="0" />
<!-- Oracle数据库增长方式序列 -->
<generator class="sequence">
<param name="sequence">ROOM_SEQ</param>
</generator>
</id>
<!-- 映射roomnumber属性 -->
<property name="roomnumber" type="java.lang.String">
<column name="ROOMNUMBER" length="11" not-null="true" />
</property>
<!-- 映射name属性 -->
<property name="name" type="java.lang.String">
<column name="NAME" length="32" not-null="true" />
</property>
<!-- 通过连接表的多端,因此需要table属性为roomusers -->
<set name="users" cascade="all" table="roomusers">
<!-- 该key的字段为连接表中的字段,作为外键 -->
<key column="roomid" />
<!-- 配置多对多 -->
<many-to-many class="Userinfo" column="userid" />
</set>
</class>
</hibernate-mapping>
Userinfo.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping package="com.cosmow.hibernatedemo2.entity">
<class name="Userinfo" table="USERINFO" schema="STORE">
<id name="id" type="java.lang.Long">
<column name="ID" precision="4" scale="0" />
<!-- Oracle数据库增长方式序列 -->
<generator class="sequence">
<param name="sequence">USERINFO_SEQ</param>
</generator>
</id>
<property name="name" type="java.lang.String">
<column name="NAME" length="32" not-null="true" />
</property>
<property name="sex" type="java.lang.String">
<column name="SEX" length="2" />
</property>
<set name="rooms" cascade="all" table="roomusers">
<key column="userid" />
<many-to-many class="Room" column="roomid" />
</set>
</class>
</hibernate-mapping>
测试代码如下:
package com.cosmow.hibernatedemo2.demo;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.cosmow.HibernateSessionFactory;
import com.cosmow.hibernatedemo2.entity.Room;
import com.cosmow.hibernatedemo2.entity.Userinfo;
相关文章推荐
- Hibernate关联关系配置-----基于连接表的双向一对多/多对一映射配置
- 在Hibernate中配置一对多连接表
- Hibernate关联关系配置-----基于连接表的双向一对多/多对一映射配置
- Hibernate关联关系配置-----基于连接表的双向多对多配置
- Hibernate关联关系映射-----基于连接表的单向多对多映射配置
- Hibernate关联关系配置-----基于连接表的双向一对一映射配置
- Hibernate关联关系映射-----基于连接表的单向多对多映射配置
- Hibernate关联关系配置-----基于连接表的双向一对一映射配置
- Hibernate关联关系映射-----基于连接表的单向一对多映射配置
- Hibernate关联关系映射-----基于连接表的单向一对多映射配置
- Hibernate关联关系配置-----基于连接表的双向多对多配置
- Hibernate关联关系配置-----基于连接表的双向多对多配置
- 在Hibernate中配置多对多连接表
- hibernate配置数据库连接池的三种方法
- MyEclipse自动生成hibernate实体类和配置文件攻略
- maven 配置hibernate
- Hibernate基础配置总结(待完善)
- hibernate *.hbm.xml 配置文件的一点小东西
- hibernate经典配置与测试
- 利用Hibernate对象配置信息自动导出生成表结构