休眠为相同的外键返回相同的实例
hibernate returning same instance for same foreign keys
我有两个 tables -
PersonType Person
---------------------- ------------------
ID type pid pid name
1 Teacher 1 1 Smith
2 Driver 1 2 David
3 Waiter 2
pid 是Person 的外键。在休眠状态下,将这两个 table 映射为多对一。
对于java 类 -
PersonType
{
String id;
String type;
Person p;
}
Person
{
String pid;
String name;
}
从 java 代码中,检索到所有 PersonTypes。检索后,通过调用personType.p.pid= 2将“Driver”更改为Smith。
但是,PersonType ID 1 和 2 都更新了。因为 PersonType ID 1 和 2 有 pid 1,休眠 return 相同的实例和
对其中之一的任何更改都会反映在两者上。请任何人都可以建议如何克服这个问题。谢谢。
我认为你建模的方式不应该这样做:
personType.p.pid=2
当您更改休眠管理模型上的参考数据时,我想您会想要这样做:
personType.p=smith
其中 smith
是对 ID 为 1
的 Person
对象的引用
personType.p.pid= 2
此代码不会将 Driver 更改为 Smith。它将 Smith 的 id 从 1 更改为 2。您需要做的是 @Alex 建议的。
我有两个 tables -
PersonType Person
---------------------- ------------------
ID type pid pid name
1 Teacher 1 1 Smith
2 Driver 1 2 David
3 Waiter 2
pid 是Person 的外键。在休眠状态下,将这两个 table 映射为多对一。
对于java 类 -
PersonType
{
String id;
String type;
Person p;
}
Person
{
String pid;
String name;
}
从 java 代码中,检索到所有 PersonTypes。检索后,通过调用personType.p.pid= 2将“Driver”更改为Smith。 但是,PersonType ID 1 和 2 都更新了。因为 PersonType ID 1 和 2 有 pid 1,休眠 return 相同的实例和 对其中之一的任何更改都会反映在两者上。请任何人都可以建议如何克服这个问题。谢谢。
我认为你建模的方式不应该这样做:
personType.p.pid=2
当您更改休眠管理模型上的参考数据时,我想您会想要这样做:
personType.p=smith
其中 smith
是对 ID 为 1
Person
对象的引用
personType.p.pid= 2
此代码不会将 Driver 更改为 Smith。它将 Smith 的 id 从 1 更改为 2。您需要做的是 @Alex 建议的。