因为你的session.save(user);表示由user主动方插入,然后再级联插入TPasspo,而你TUser的ID字段上建外键关联到TPasspo的ID时,由于表示TPasspo为主动方,那么插入USER时由于TPasspo没插入所以不能确定起USER的ID,反过来在TPasspo的ID建外键关联到TUser的ID上由于USER为主动方,所以插入USER后再级联插入TPasspo,就能确定TPasspo所关联到USER上的ID(也即自己的主健ID)
解决方案 »
- ibatis 很奇怪的问题
- red hat enterprise linux 4 不能右键复制,可以命令复制
- java怎么向activemq发送消息?谁有原代码 比较简单的就可以了 只要发的就可以
- 关于远程调用出错信息,哪位正在研究或用过的高手可请教下。。。。
- 高手求高手讲讲Hibernate的表的多对一关系,
- 请问定义一个空接口的意义在哪里
- webwork+spring的问题!
- 求解一个很莫名其妙的 struts2 通配符 重定向的问题
- 访问数据库,出现java.lang.OutOfMemoryError错误,该咋办?
- 一个关于JSP的问题???(在线等待)
- 为什么我用<bean:write name="userName" scope="request" />显示request里的值时会出现如下错误?
- 差别在哪里?
删除时只要delete一次,但是如果有多个一对一关系,delete一次只能删除parentPO和一项所对应的对象,而在删除其它对应项时,parentPO已经被删掉了,程序运行会出错。
关于inverse的设置,在一对多的情况下建议将一端的inverse设为true,而由多端去自动维护关联关系,为什么这样做其实挺容易理解的,假设org和user为一对多的关联,org.getUsers的inverse设置为false,org.getUsers().add(user);dao.update(org);当update的时候org所关联的所有user的orgId都会更新一次,可想而知这个效率,而如果改为在多端维护(多端设置为inverse=false),则是这样:user.setOrg(org);dao.update(user);当update的时候就仅仅是更新user这一条记录而已。
不知道你看过没看过《深入浅出Hibernate》(夏昕编写的那本),他书上有个例子(书上的146页),跟我基本一样,害死一大批人啊,网上好多根据这个写的东西(比如:http://www.blogjava.net/myblog/archive/2006/07/05/56768.html)看来真是:尽信书不如无书!
<one-to-one
name="TUser"
class="com.jingxl.hib.pojo.TUser"
constrained="true"
/>
的constrained="true"表示你的TPasspo主键做为外键参照TUser主键,而你在表里TUser的ID字段上建外键关联到TPasspo的ID时这样就反了,违反了你定义的XML里对其的定义
按照你的说法,是应该在TPasspo表的ID字段上建外键关联到TUser的ID字段才是正确的吧???
如果是的话,我马上个作者发个email!!
你有QQ吗?还想问几个问题。能不能加我的QQ,30397825!
光看不做肯定是不行的,至少也要把书上的例子调试过关才行^_^
做到这个的时候怎么调试也不行,而且网上的例子基本上也一样,都是从TUser的ID字段上建外键关联到TPasspo的ID,自己也搞不明白,就来这里请教高人了!