hibernate 关联 关系 我非常疑惑
A 表 id(自增长) worknumber(pk) name
B 表 id(自增长) worknumber(fk) card
=========================================================================
在A表这 设置了关联关系
POJO A a
里设置了
B b;
set b 方法
get b 方法
<many-to-one name="b" column="worknumber" property-ref="worknumber"(由于不是主键必须得设这个来指定 ,不设置就报错) not-null="true"
lazy="false" unique="true" />
这个设置好 worknumber 字段 必须 设置 update insert false
B表 没有设
======================================================================================
A a = aDao.findAByWorkNumber(WorkNumber);
B b = a.getb();
b.setworknumber (“123”)
bdao.update(b);
a.setname(“xxx”);
========================================================================================
这样 A表和 B表 2个字段的 worknumber 都会更新。
当我把“a.setName ”注释掉
只有B表的worknumber 更新了 A却没有。
也就是说 只有当 A表的 其他字段也发生变化 的时候 A表的 WORKnumber才会跟着B表变化
这是为什么?
而且 我并没有 adao.update(a) 只要A表有字段发生变化 就会更新成功, 为什么?
大家是如何建表的
1 对 1的话 是不是 2个表都需要 自增长ID
1 对 多的话 在多方需要加自增长ID吗(为什么不可以直接用1方的主键 )
多 对 多呢?
都是通过 2个多对已完成 来代替 设置2个set ?
------解决方案--------------------用myexlipse的反向工程啊!这样只要你把表建好,把他们的关系建好,直接用反向工程,代码都出来了.一般就没问题了!
------解决方案--------------------myexlipse的反向工程
只有多对一的,没有多对多的哦.呵呵
------解决方案--------------------在b 的一端设置inverse="true"
------解决方案--------------------即由a端来维护关系,这样:
A a = aDao.findAByWorkNumber(WorkNumber);
B b = a.getb();
b.setworknumber (“123”)
adao.update(a);
试试!
------解决方案--------------------A实体类的对象.外键属性.B实体类的属性,这样就不需要update insert false了