我有两张桌子 -
PersonType Person
---------------------- ------------------
ID type pid pid name
1 Teacher 1 1 Smith
2 Driver 1 2 David
3 Waiter 2
pid是Person的外键。使用hibernate,将这两个表映射为多对一。
对于java类 -
PersonType
{
String id;
String type;
Person p;
}
Person
{
String pid;
String name;
}
从java代码中检索所有 PersonTypes 。检索后,更改了" 驱动程序"通过调用 personType.p.pid = 2 作为 Smith 。 但是, PersonType ID 1 和 2 都会更新。由于 PersonType ID 1 且 2 有 pid 1 ,hibernate会返回相同的实例, 其中一个的任何变化都反映在两者上。请任何人都可以建议如何克服这一点。谢谢。
答案 0 :(得分:0)
我认为你建模的方式,你不应该这样做:
personType.p.pid=2
当你在hibernate托管模型上更改参考数据时,我想你会想要这样做:
personType.p=smith
其中smith
是对ID为Person
1
对象的引用
答案 1 :(得分:0)
personType.p.pid= 2
此代码不会将驱动程序更改为 Smith 。它将史密斯的ID从1更改为2.您需要做的是@Alex建议的内容。