关联映射-one2many
单项多对一
省略 get set
Dept:
public class Dept {
private Byte deptNo;
private String deptName;
private String location;
}
Emp:
public class Emp {
private Integer empNo;
private String empName;
private Dept dept;
}
Emp.hbm.xml:
在多的一端使用 many-to-one 来映射多对一的关联关系
name:多的一端关联一的一端的属性名
class:一的一端属性对应的类名
column:一的一端在多的 一端对应的数据表中的外键的列(如果不写该属性则列名为属性名)
<class name="cn.jbit.hibernatedemo.entity.Emp" table="emp">
<id name="empNo" column="EMPNO" type="java.lang.Integer">
<generator class="native"/>
</id>
//省略其他属性配置
<many-to-one name="dept" column="DEPTNO"
class="cn.jbit.hibernatedemo.entity.Dept" />
</class>
双向多对一
Dept.java:
public class Dept {
private Byte deptNo;
private String deptName;
private String location;
private Set<Emp> emps = new HashSet<Emp>();
}
Emp.java:
public class Emp {
private Integer empNo;
private String empName;
private Dept dept;
}
Emp.hbm.xml:与单向一致
Dept.hbm.xml:
映射一对多的集合属性使用 set 节点:
name:集合对应的属性名
table:set 中的元素对应的记录放在哪一个数据表中,该值需要和多对一的多的表名一致
key:指定多的表中的外键列的名字
one-to-many:指定映射类型
<class name="cn.jbit.hibernatedemo.entity.Dept" table="dept">
<id name="deptNo" column="DEPTNO" type="java.lang.Byte">
<generator class="assigned"/>
</id>
......
<set name="emps" table="emp">
<key column="DEPTNO"></key>
<one-to-many class="cn.jbit.hibernatedemo.entity.Emp"/>
</set>
</class>
Hibernate.cfg.xml:
<mapping resource=_"cn/jbit/hibernatedemo/entity/Dept.hbm.xml"_/>
<mapping resource=_"cn/jbit/hibernatedemo/entity/Emp.hbm.xml"_/>
set 的三个属性:
- cascade(级联)
1.none:当 Session 操纵当前对象时,忽略其他关联的对象。它是 cascade 属性的默认值
2.save-update:当通过 Session 的 save()、update()及 saveOrUpdate()方法来保存或更新当前对象时。
3.delete:当通过 Session 的 delete()方法删除当前对象时,会级联删除所有关联的对象。
4.delete-orphan:删除孤儿。
5.all:包含 save-update,delete 的行为。 - inverse(反转)
1.inverse 决定由双向关联哪一方来维护关联关系
2.inverse 设置为 false,则为主动方,主动负责维护关联关系,默认是 false 。
3.inverse 设置为 true,则为被动方,由多的一端负责维护关联关系。
一般将一的一端设为 true,以使多的一方维护关联关系,有效减少 update 语句 - order-by
在查询时,对集合(set)中的元素进行排序,使用表的字段名,而不是属性名
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于