hibernate 一对一,无法级联保存。 本帖最后由 chudu 于 2010-07-06 19:29:18 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 userInfo.setUser(user); user.setUserInfo(userInfo);到底谁是谁的子属性啊? <set name="userRoles" inverse="true" cascade="all" fetch="select"> <key> <column name="USER_ID" precision="10" scale="0" not-null="true" /> </key> <one-to-many class="org.scbit.lsbi.biomedab.pojo.UserRole" /> </set>级联操作的时候一定要保证inverse="false" 根据错误看好像你的序列有问题,还有一对一保存时只有一个表的主键自动生成,另外一个引用他的副本 <set name="userRoles" inverse="true" cascade="all" fetch="select"> <key> <column name="USER_ID" precision="10" scale="0" not-null="true" /> </key> <one-to-many class="org.scbit.lsbi.biomedab.pojo.UserRole" /> </set>你的这个一对多好像也有问题,<column name="USER_ID" precision="10" scale="0" not-null="true" />这里的USER_ID应该写成ID吧 USER_ID应该写成ID?写成ID的话user表级联查询userRoles表是报:2010-07-07 12:18:03,703 [ERROR] - ORA-00904: "USERROLES1_"."ID": invalid identifier 我的表userRole中和user关联的字段数据库中是user_id 靠,我把两表拆开保存先保存user 在保存userInfo 也不行,debug一下,如下:user.setPassword(loginPwd); user.setCreatedDate(new Date()); user.setStatus(UserStatusEnum.AVAILABLE.name()); userManager.saveOrUpdate(user); //上面的user保存成功,eclispe中debug看到成功后的user的id和数据库中实际保存的ID的值不一样,刚才保存后程序中打出来的id是787,而数据库中却是788.郁闷,每次测试时都不一样。不知什么原因导致。 UserInfo userInfo = new UserInfo(); userInfo.setLastLoginTime(new Date()); userInfo.setLoginNum(0); userInfo.setPoint(0); userInfo.setId(user.getId()); userInfo.setUser(user); user.setUserInfo(userInfo); userManager.saveOrUpdate(userInfo); hibernate如何调用需要填写参数的sql语句? struts2 重新请求后属性值仍保持上次请求的结果 tomcat启动它的java程序,在catalina.bat是哪句批处理? xfire中INOUT参数如何传入 在Struts2中使用struts-menu做动态菜单的问题! Java EE高级软件班 一个关于TOMCAT的路径问题....试了N种方法..快抓狂了.. 如何用java实现文件传输?救火!! 高薪诚聘JAVA开发人员或者面试题目 java把一堆数据写入Excel模板当中去 struts2异常处理,捕捉不到局部异常 还是线程死锁的问题
user.setUserInfo(userInfo);
到底谁是谁的子属性啊?
<key>
<column name="USER_ID" precision="10" scale="0" not-null="true" />
</key>
<one-to-many class="org.scbit.lsbi.biomedab.pojo.UserRole" />
</set>
级联操作的时候一定要保证inverse="false"
<set name="userRoles" inverse="true" cascade="all" fetch="select">
<key>
<column name="USER_ID" precision="10" scale="0" not-null="true" />
</key>
<one-to-many class="org.scbit.lsbi.biomedab.pojo.UserRole" />
</set>
你的这个一对多好像也有问题,<column name="USER_ID" precision="10" scale="0" not-null="true" />这里的USER_ID应该写成ID吧
先保存user 在保存userInfo 也不行,debug一下,如下:user.setPassword(loginPwd);
user.setCreatedDate(new Date());
user.setStatus(UserStatusEnum.AVAILABLE.name());
userManager.saveOrUpdate(user);
//上面的user保存成功,eclispe中debug看到成功后的user的id和数据库中实际保存的ID的值不一样,刚才保存后程序中打出来的id是787,而数据库中却是788.郁闷,每次测试时都不一样。不知什么原因导致。
UserInfo userInfo = new UserInfo();
userInfo.setLastLoginTime(new Date());
userInfo.setLoginNum(0);
userInfo.setPoint(0);
userInfo.setId(user.getId());
userInfo.setUser(user);
user.setUserInfo(userInfo);
userManager.saveOrUpdate(userInfo);