hibernate映射一对多双向关联关系

首先在"一"方类中增加一个集合属性Student:

private Set students = new HashSet();
public Set getStudents(){
	return student;
}
public void setStudents(set students){
	this.students = students;
}

注意,hibernate要求在持久化中定义集合属性时,必须把属性声明为接口类型,如java.util.Set、java.util.Map、java.util.List.之所以这样做的原因是:当hibernate调用setStudents时,传进去的参数是hibernate自己实现的Set接口的实例。如果把students声明为HashSet类型,就强迫hibernate只能把hashSet类的实例传递给setStudents.

由于在school表中没有直接与students属性直接对应的字段,因此不能用<property>元素来映射students属性,而是要使用<set>元素:

<set
	name="students"
	cascade="save-update"
>
	<key column="school_id"/>
	<one-to-many class="Student"/>
	
</set>

<set>中把inverse设为trueB表明School端的关联只是Student端关联的镜像。当hibernate探测到持久化对象中School和Student端均发生变化时,仅按照Student对象属性的变化来同步更新数据库。

结论:

在映射一对多的双向关联时,应该在"one"的一方把<set>元素的inverse属性设为true.这可以提高应用的性能。

在建立两个对象的双向关联时,应该同时修改修改两端对象的相应属性:

student.setSchool(school);
school.getStudents.add(student);

这样可以提高程序的健壮性,逻辑也更加合理。使业务逻辑层的程序代码不受hibernate的影响。当解除双向关联的关系时,也应该修改两端:

student.setSchool(null);
school.getStudents.remove(student);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值