前两种关系用的部门与员工两个表来说明
一对多
<class name="hiber.Dept" table="DEPT" schema="SCOTT" >
<id name="deptno" type="java.lang.Byte">
<column name="DEPTNO" precision="2" scale="0" />
<generator class="assigned" />
</id>
<property name="dname" type="java.lang.String">
<column name="DNAME" length="14" />
</property>
<property name="loc" type="java.lang.String">
<column name="LOC" length="13" />
</property>
[b] <set name="emps" inverse="true" cascade="save-update" lazy="false">
<key>
<column name="deptno" precision="2" scale="0" />
</key>
<one-to-many class="hiber.Emp" />
</set>[/b]
</class>
这段代码是需要放在一对多中的主表配置中的
name:集合属性的名称(也可以理解为一对多中那个“多”属性名)
table:(可选,默认为属性“name”的值):集合表的名称(可理解为一对多中子表的名称)
inverse:(可选,默认为false):标记这个集合作为双向关联关系中的方向的一端
cascade:(可选:默认为none):让操作级联到子实体
lazy:(可选)是否延迟加载
多对一
<class name="hiber.Emp" table="EMP" schema="SCOTT">
<id name="empno" type="java.lang.Short">
<column name="EMPNO" precision="4" scale="0" />
<generator class="assigned" />
</id>
[b]<many-to-one name="dept" class="hiber.Dept" fetch="select" lazy="false">
<column name="DEPTNO" precision="2" scale="0" />
</many-to-one>[/b]
<property name="ename" type="java.lang.String">
<column name="ENAME" length="10" />
</property>
<property name="job" type="java.lang.String">
<column name="JOB" length="9" />
</property>
<property name="mgr" type="java.lang.Short">
<column name="MGR" precision="4" scale="0" />
</property>
<property name="hiredate" type="java.util.Date">
<column name="HIREDATE" length="7" />
</property>
<property name="sal" type="java.lang.Double">
<column name="SAL" precision="7" />
</property>
<property name="comm" type="java.lang.Double">
<column name="COMM" precision="7" />
</property>
</class>
中,没有像一对多的,而是直接用了many–to–one.这段代码是需要放在多对一中的子表配置中的(如上)
outer–join:为外链接
update,insert:指定对应的字段是否在用于UPDATE和/或INSERT的SQL语句中包含.
column:关联的字段名.(多对主类对应的字段名)
not–null:是否为null.
一对多
<class name="hiber.Dept" table="DEPT" schema="SCOTT" >
<id name="deptno" type="java.lang.Byte">
<column name="DEPTNO" precision="2" scale="0" />
<generator class="assigned" />
</id>
<property name="dname" type="java.lang.String">
<column name="DNAME" length="14" />
</property>
<property name="loc" type="java.lang.String">
<column name="LOC" length="13" />
</property>
[b] <set name="emps" inverse="true" cascade="save-update" lazy="false">
<key>
<column name="deptno" precision="2" scale="0" />
</key>
<one-to-many class="hiber.Emp" />
</set>[/b]
</class>
这段代码是需要放在一对多中的主表配置中的
name:集合属性的名称(也可以理解为一对多中那个“多”属性名)
table:(可选,默认为属性“name”的值):集合表的名称(可理解为一对多中子表的名称)
inverse:(可选,默认为false):标记这个集合作为双向关联关系中的方向的一端
cascade:(可选:默认为none):让操作级联到子实体
lazy:(可选)是否延迟加载
多对一
<class name="hiber.Emp" table="EMP" schema="SCOTT">
<id name="empno" type="java.lang.Short">
<column name="EMPNO" precision="4" scale="0" />
<generator class="assigned" />
</id>
[b]<many-to-one name="dept" class="hiber.Dept" fetch="select" lazy="false">
<column name="DEPTNO" precision="2" scale="0" />
</many-to-one>[/b]
<property name="ename" type="java.lang.String">
<column name="ENAME" length="10" />
</property>
<property name="job" type="java.lang.String">
<column name="JOB" length="9" />
</property>
<property name="mgr" type="java.lang.Short">
<column name="MGR" precision="4" scale="0" />
</property>
<property name="hiredate" type="java.util.Date">
<column name="HIREDATE" length="7" />
</property>
<property name="sal" type="java.lang.Double">
<column name="SAL" precision="7" />
</property>
<property name="comm" type="java.lang.Double">
<column name="COMM" precision="7" />
</property>
</class>
中,没有像一对多的,而是直接用了many–to–one.这段代码是需要放在多对一中的子表配置中的(如上)
outer–join:为外链接
update,insert:指定对应的字段是否在用于UPDATE和/或INSERT的SQL语句中包含.
column:关联的字段名.(多对主类对应的字段名)
not–null:是否为null.