CREATE TABLE user_course

 多对多关系并不是两张表的关系,而是三张表的关系,而且要求必须有一个中间表,中间表必须只有两个字段,必须为复合主键,必须包含外键。

  如果以上条件都满足,MyEclipse在三张表一起选择时,就可以生成多对多关系映射。

  类一般只生成两个类,例如:学生选课中,只生成学生和课程类,关系使用以下方式描述:

  1)  学生类中保存着该学生选择的所有课程对象,使用Set集合来保存。

  2)  课程类中保存着所有选择此课程的学生对象,使用Set集合来保存。

  建立数据表

  CREATE TABLE user_course (

  userid               varchar2(40)             ,

  course_id            number(8)                ,

  primary key (userid,course_id) ,

  foreign key (userid) references t_user (userid) on delete cascade ,

  foreign key (course_id) references course (id) on delete cascade

  );

  使用t_user,course和user_course表,完成映射:

  many to many 前面打勾:

  由于t_user使用assigned,course使用increment,因此,这里不统一选择方式。

  而是在后面单独选择。

  同时,注意将允许使用多对多的多选框选中。

  可以在这里单独选择方式。

  public class TUser implements java.io.Serializable {

  private String userid;

  private String realName;

  private String password;

  private Date registDate;

  private Date lastLoginDate;

  private Set courses = new HashSet(0);

  public class Course implements java.io.Serializable {

  private Integer id;

  private String title;

  private Set TUsers = new HashSet(0);

  类中确定了集合关系

  映射文件里也描述了多对多关系:

  <?xml version="1.0" encoding="utf-8"?>

  <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

  <hibernate-mapping>

  <class name="org.liky.pojo.TUser" table="T_USER" schema="SUNXUN">

  <id name="userid" type="java.lang.String">

  <column name="USERID" length="40" />

  <generator class="assigned"></generator>

  </id>

  <property name="realName" type="java.lang.String">

  <column name="REAL_NAME" length="20" not-null="true" />

  </property>

  <property name="password" type="java.lang.String">

  <column name="PASSWORD" length="32" not-null="true" />

  </property>

  <property name="registDate" type="java.util.Date">

  <column name="REGIST_DATE" length="7" />

  </property>

  <property name="lastLoginDate" type="java.util.Date">

  <column name="LAST_LOGIN_DATE" length="7" />

  </property>

  <!--

  在User中包含一个名称为courses的Set集合,数据是根据中间表USER_COURSE来关联取得的。

  -->

  <set name="courses" table="USER_COURSE" schema="SUNXUN">

  <!--

  中间表中通过USERID与当前类(User)关联

  -->

  <key>

  <column name="USERID" length="40" not-null="true" />

  </key>

  <!--

  中间表还通过COURSE_ID与Course对象关联,联系起来出现的是多对多关系。

  -->

  <many-to-many entity-name="org.liky.pojo.Course">

  <column name="COURSE_ID" precision="8" scale="0" not-null="true" />

  </many-to-many>

  </set>

  </class>

  </hibernate-mapping>

  <?xml version="1.0" encoding="utf-8"?>

  <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

  <!--

  Mapping file autogenerated by MyEclipse Persistence Tools

  -->

  <hibernate-mapping>

  <class name="org.liky.pojo.Course" table="COURSE" schema="SUNXUN">

  <id name="id" type="java.lang.Integer">

  <column name="ID" precision="8" scale="0" />

  <generator class="increment"></generator>

  </id>

  <property name="title" type="java.lang.String">

  <column name="TITLE" length="50" not-null="true" />

  </property>

  <set name="TUsers" inverse="true" table="USER_COURSE" schema="SUNXUN">

  <key>

  <column name="COURSE_ID" precision="8" scale="0" not-null="true" />

  </key>

  <many-to-many entity-name="org.liky.pojo.TUser">

  <column name="USERID" length="40" not-null="true" />

  </many-to-many>

  </set>

  </class>

  </hibernate-mapping>

  可以发现有一边的配置中出现了inverse="true",这个配置表示关联关系由对方进行维护。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值