Hibernate一对多,多对一,多对多,一对一关系总结

TomasEdision 2010-01-13

前两种关系用的部门与员工两个表来说明

一对多

<classname="hiber.Dept"table="DEPT"schema="SCOTT">

<idname="deptno"type="java.lang.Byte">

<columnname="DEPTNO"precision="2"scale="0"/>

<generatorclass="assigned"/>

</id>

<propertyname="dname"type="java.lang.String">

<columnname="DNAME"length="14"/>

</property>

<propertyname="loc"type="java.lang.String">

<columnname="LOC"length="13"/>

</property>

<setname="emps"inverse="true"cascade="save-update"lazy="false">

<key>

<columnname="deptno"precision="2"scale="0"/>

</key>

<one-to-manyclass="hiber.Emp"/>

</set>

</class>

这段代码是需要放在一对多中的主表配置中的

name:集合属性的名称(也可以理解为一对多中那个“多”属性名)

table:(可选,默认为属性“name”的值):集合表的名称(可理解为一对多中子表的名称)

inverse:(可选,默认为false):标记这个集合作为双向关联关系中的方向的一端

cascade:(可选:默认为none):让操作级联到子实体

lazy:(可选)是否延迟加载

多对一

<classname="hiber.Emp"table="EMP"schema="SCOTT">

<idname="empno"type="java.lang.Short">

<columnname="EMPNO"precision="4"scale="0"/>

<generatorclass="assigned"/>

</id>

<many-to-onename="dept"class="hiber.Dept"fetch="select"lazy="false">

<columnname="DEPTNO"precision="2"scale="0"/>

</many-to-one>

<propertyname="ename"type="java.lang.String">

<columnname="ENAME"length="10"/>

</property>

<propertyname="job"type="java.lang.String">

<columnname="JOB"length="9"/>

</property>

<propertyname="mgr"type="java.lang.Short">

<columnname="MGR"precision="4"scale="0"/>

</property>

<propertyname="hiredate"type="java.util.Date">

<columnname="HIREDATE"length="7"/>

</property>

<propertyname="sal"type="java.lang.Double">

<columnname="SAL"precision="7"/>

</property>

<propertyname="comm"type="java.lang.Double">

<columnname="COMM"precision="7"/>

</property>

</class>

中,没有像一对多的,而是直接用了many–to–one.这段代码是需要放在多对一中的子表配置中的(如上)

outer–join:为外链接

update,insert:指定对应的字段是否在用于UPDATE和/或INSERT的SQL语句中包含.

column:关联的字段名.(多对主类对应的字段名)

not–null:是否为null.

相关推荐