我有一个 A 类与 B 类具有 OneToMany 关系的情况。B 类只包含一些属性,如 id、firstName 和 lastName。id 是通过 UUID 生成的。因为很可能 A 的很多实例将引用具有相同 firstName 和 lastName 值的 B 实例,加上 B 实例中的这些值不太可能永远改变。因此,如果其他参数相同,我决定避免重复并让 A 的实例引用到 B 的相同实例(在数据库中)。
例子:
b: "John Doe"
a: a1 ("Foo Bar", "John Doe"), a2 ("John Doe", "Alan Smith").
为了实现这一点,如果将新的 B 添加到 A 中,我总是检查数据库中是否存在具有相同参数的记录。如果是这样,我将用数据库中的那个覆盖 B 实例的 id 并添加之后交给A。
现在我的问题来了。一切正常,但如果我坚持一个 A,我手动更改了 B 的 ID,使其具有与数据库中已经存在的 B 相同的 ID,我将得到一个异常:
Caused by: org.hibernate.exception.ConstraintViolationException:
Duplicate entry '2cfa1412-5f64-4a9c-b55c-f7db1148bef9' for key 'PRIMARY'
所以我的问题是:
- 如何在不忽略异常的情况下解决此问题?
- 这是满足我需要的好方法吗?
最好的祝福