hibernate为相同的外键返回相同的实例

时间:2015-01-23 21:39:56

标签: java hibernate caching one-to-many single-instance

我有两张桌子 -

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会返回相同的实例, 其中一个的任何变化都反映在两者上。请任何人都可以建议如何克服这一点。谢谢。

2 个答案:

答案 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建议的内容。