避免重复JPA多对一

时间:2012-10-28 22:20:16

标签: jpa eclipselink

我之前已经为Hibernate询问了这个问题的变体。但是,我现在正在与Eclipselink合作,它仍然让我很烦恼。这很简单:

我需要在多对一关系中持久保存包含城市名称的地址对象。我希望能够坚持地址和级联保存城市 - 但只有城市是独一无二的。根据我的理解,JPA不直接支持这一点?可能的解决方案包括使用城市名称作为城市表中的唯一ID,并查询特定城市的城市表,然后在保存之前将该对象添加到地址。我当然看到几个StackOverflow问题/答案似乎表明这是方法(JPA cascade persist - many to one

我在这里遗漏了什么吗?有替代/更好的方法吗?

1 个答案:

答案 0 :(得分:1)

是的,解决方案是从数据库获取城市,如果它不存在则创建它,并将其设置为地址。

没有办法解决这个问题。但是,城市名称不一定是主键。我会使用自动生成的,非功能性的代理键作为PK,并在城市名称上添加唯一约束。这至少可以让您修复城市名称中的拼写错误,而无需更新引用它们的千个地址。