前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hibernate 中 一对多、多对一、 关联关系的 配置

Hibernate 中 一对多、多对一、 关联关系的 配置

作者头像
qubianzhong
发布2018-08-10 16:47:46
3.1K0
发布2018-08-10 16:47:46
举报
文章被收录于专栏:行者常至行者常至
多对一:(街道→区县)
  • * TBLJd.java 类*
代码语言:javascript
复制
public class TblJd implements java.io.Serializable {

    // Fields

    private Integer jdid;
    private TblQx tblQx;
    private String jd;
    private Set tblFwxxes = new HashSet();

    ......

    }
  • TblJd.hbm.xml:
代码语言:javascript
复制
    <class name="com.qbz.entity.TblJd" table="TBL_JD" schema="dbo" catalog="zf">
        <id name="jdid" type="java.lang.Integer">
            <column name="jdid" />
            <generator class="native" />
        </id>

        <many-to-one name="tblQx" class="com.qbz.entity.TblQx" fetch="select" lazy="false" cascade="all">
            <column name="qxid" not-null="true" />
        </many-to-one>

        <property name="jd" type="java.lang.String">
            <column name="jd" length="50" />
        </property>
    </class>
  • < many-to-one >元素建立了 tblQx 属性和 TBL_JD 表的的外键 qxid 的映射关系,其包括以下属性:
    • name : 设定待映射的持久化类的属性名,此处为 TblJd 类的 tblQx 属性。
    • column:设定和持久化类的属性对应的外键,此处为TBL_JD表的外键 qxid。
    • class:设定持久化类的属性类型,此处设定 tblQx 类型为 com.qbz.entity.TblQx。


一对多:(街道→房屋信息)
  • TblJd.hbm.xml:
代码语言:javascript
复制
    <class name="com.qbz.entity.TblJd" table="TBL_JD" schema="dbo" catalog="zf">
        <id name="jdid" type="java.lang.Integer">
            <column name="jdid" />
            <generator class="native" />
        </id>

        <many-to-one name="tblQx" class="com.qbz.entity.TblQx" fetch="select" lazy="false" cascade="all">
            <column name="qxid" not-null="true" />
        </many-to-one>

        <property name="jd" type="java.lang.String">
            <column name="jd" length="50" />
        </property>

        <set name="tblFwxxes" inverse="true" lazy="false">
            <key>
                <column name="jdid" />
            </key>
            <one-to-many class="com.qbz.entity.TblFwxx" />

    </class>
  • < set >元素建立了tblFwxxes 属性在数据库中的映射关系。
    • set : 表明 TblJd 类的 tblFwxxes 属性为 java.util.set 集合类型。
    • key : 表明 TBL_FWXX 表通过外键 jdid 参照 TBL_JD表。
    • one-to-many : 表明 tblFwxxes 集合中存放的是一组 TblFwxx 对象。

  • 其中:
    • inverse: 表示关系的维护由谁来执行。true 表示不由自己执行,而有对应的另外一方执行。false 则相反,表示由自己维护关系。
    • inverse 属性在< one-to-many >中,如果由one来维护,那么性能会非常低。因为,many 方的每一次操作,one方都要维护一次双方的关系。
    • cascade : 表示是否进行级联操作。all表示所有的操作都进行级联。

多对多:(学生→老师)
  • Student.java 类
代码语言:javascript
复制
public class Student implements java.io.Serializable {

    // Fields

    private Integer id;
    private String name;
    private Set teachers = new HashSet(0);

    .......

    }

  • Teacher.java 类
代码语言:javascript
复制
public class Teacher implements java.io.Serializable {

    // Fields

    private Integer id;
    private String name;
    private Set students = new HashSet(0);

    .......

    }

  • Student.hbm.xml:
代码语言:javascript
复制
<hibernate-mapping>
    <class name="com.qbz.entity.Student" table="student" schema="dbo"
        catalog="guanxiyingshe">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="50" />
        </property>


        <set name="teachers" inverse="true" table="teacher_student"
            schema="dbo" catalog="guanxiyingshe">
            <key>
                <column name="student_id" not-null="true" />
            </key>
            <many-to-many entity-name="com.qbz.entity.Teacher">
                <column name="teacher_id" not-null="true" />
            </many-to-many>
        </set>

    </class>
</hibernate-mapping>

  • 对于双向多对多关系,必须把其中一端的属性的inverse 属性配置为true,关联的两端都可以使用< set >元素。
  • 在数据库设计时,需要设计一个中间表 teacher_student ,通过中间表描述学生表和老师表的多对多关系。
  • 其映射文件配置方式与一对多很类似,也需要一个 class 属性来设置关联的属性的类型,column 属性用来设定哪个字段去做外键关联,最后,根据业务需要,将某一方的inverse 属性设置为false。

1、这里比一对多关联多一个 table 属性,table 指向数据库建立的关联的那张表。
2、Key 中的 column : 关联表中和 student 表发生关系的字段。
3、Many-to-many 中的 column 指的是关联表中与 class (com.qbz.entity.Teacher) 关联的字段。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年07月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 多对一:(街道→区县)
  • 一对多:(街道→房屋信息)
  • 多对多:(学生→老师)
    • 1、这里比一对多关联多一个 table 属性,table 指向数据库建立的关联的那张表。
      • 2、Key 中的 column : 关联表中和 student 表发生关系的字段。
        • 3、Many-to-many 中的 column 指的是关联表中与 class (com.qbz.entity.Teacher) 关联的字段。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档