Hibernate Annotation级联操作不成功,求解?1, 对象关系说明:School对UserMember是一对多关系:
Hibernate Annotation级联操作不成功,求解?
1, 对象关系说明:
School对UserMember是一对多关系:
====================================================
2, 相关类说明:
private School school;@ManyToOne@JoinColumn(name = "schoolId")public School getSchool(){return this.school;}public void setSchool(School school){this.school= school;}
School类
private java.util.Set<User> users;@OneToMany(mappedBy = "school")public java.util.Set<User> getUsers(){return this.users;}public void setUsers(java.util.Set<User> user){this.users= users;}===以上代码没经过测试===
再多说几句,关于原来楼主的写法
1、既然已经设置school属性了,就不要再设置schoolId属性了,他们是冲突的。
2、Hibernate Annotation默认OneToMany受控端(指定mappedBy = "school"即可),所以设置关联关系的话,必须为user.setSchool(school); 3 楼 weishuwei 2007-07-30 To:打倒小日本
一般情况下设置school属性确实没必要再设置schoolId属性了,但我查询user表时不希望加载用户信息,查看school信息完全可以通过schoolId来查询,这就是设置schoolId属性的原因.
关于第二条确实必须设置user.setSchool(school);不然user的schoolId得不到值(除非指定值,但我是通过create(school)来同时创建user的),所以我的解决方式如下:
userMember类中:
public String getSchoolId() {
if(this.school!=null){
return this.school.getId();
}
return this.schoolId;
}
这样user.setSchool(school);就能为user传递schoolId,并且关系还是单向的,不必担心加载user时会加载school信息,同时读取user时,不用牵涉到关联对象也能获取到schoolId.
4 楼 taya 2007-08-15 weishuwei 写道经过测试,针对users的级联关系设置为CascadeType.ALL可以同步保存用户信息,为什么级联新建不可以???
请问这个问题找到原因了么?我对这个问题也很迷惑,找了好几天了都没找到答案
weishuwei 写道一般情况下设置school属性确实没必要再设置schoolId属性了,但我查询user表时不希望加载用户信息,查看school信息完全可以通过schoolId来查询,这就是设置schoolId属性的原因.
加了FetchType.LAZY好像读取user的时候就不会立即读取school啊
我写了一段测试好像是这样的...
是不是你user对象里什么地方已经用到school了,所以才会触发对school的查询语句? 5 楼 weishuwei 2007-08-17 <div class='code_title'>to taya<br/>
</div>
<div class='dp-highlighter'>
<ol class='dp-j' start='1'>
<li class='alt'><span><span>加了FetchType.LAZY好像读取user的时候就不会立即读取school啊???</span></span></li>
</ol>
</div>
确实是这样的,因为我并不打算在读取user信息同时获取school信息,而是通过传递schoolId参数查询相应school信息. 6 楼 gky23 2007-08-22 vffffffffffffffffff 7 楼 yongganzhe 2007-10-05 我也遇到同样的问题了,解决方式:利用hibernate annotation的扩展标记@Cascade(CascadeType.SAVE_UPDATE)就ok了