Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JPA多对一中避免重复_Jpa_Eclipselink - Fatal编程技术网

在JPA多对一中避免重复

在JPA多对一中避免重复,jpa,eclipselink,Jpa,Eclipselink,我以前曾为Hibernate问过这个问题的一个变体。然而,我现在正在使用Eclipselink,它仍然困扰着我。这很简单: 我需要持久化一个地址对象,该对象在多对一关系中包含一个城市名称。我希望能够保存地址并保存城市——但前提是城市是独一无二的。据我所知,JPA不直接支持这一点吗?可能的解决方案包括使用城市名称作为城市表中的唯一id,查询特定城市的城市表,然后在保存之前将该对象添加到地址中。我确实看到了一些StackOverflow问题/答案,这些问题/答案似乎表明这是一种方法() 我是不是遗漏

我以前曾为Hibernate问过这个问题的一个变体。然而,我现在正在使用Eclipselink,它仍然困扰着我。这很简单:

我需要持久化一个地址对象,该对象在多对一关系中包含一个城市名称。我希望能够保存地址并保存城市——但前提是城市是独一无二的。据我所知,JPA不直接支持这一点吗?可能的解决方案包括使用城市名称作为城市表中的唯一id,查询特定城市的城市表,然后在保存之前将该对象添加到地址中。我确实看到了一些StackOverflow问题/答案,这些问题/答案似乎表明这是一种方法()


我是不是遗漏了什么?是否有其他/更好的方法?

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


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

感谢您的快速反馈,非常感谢。