当前位置: 首页 > 面试题库 >

在JPA / EclipseLink中将包含订单和重复项的列表持久化

阚允晨
2023-03-14
问题内容

我基本上有两个实体Entity1Entity2Entity1包含以下代码:

@OneToMany(cascade=CascadeType.PERSIST)
@OrderColumn
List<Entity2> e = new LinkedList<Entity2>();

Entity2包含一些内容,但没有任何意义。我想将一些实例添加到列表中e,最重要的是,我想将一些重复项(相同的引用)添加到列表中两次或更多次。我仍然希望JPA坚持两者,并且我希望JPA坚持名单的顺序。

到目前为止,如果我仅添加唯一项,则此方法有效。如果我添加重复项,则JPA实际上想保留正确的数据(ID
od1,Entity2的ID和顺序),但是由于关系表的主键只有两个ID,因此JPA会抛出重复的主键错误。

我该如何解决?


问题答案:

EclipseLink当前不支持OneToMany关系的重复项。重复项是对(基本)ElementCollection映射的支持。

请投票给Bug, https://bugs.eclipse.org/bugs/show_bug.cgi?id =
256978

最好的解决方案是将联接表映射到另一个实体,并为其定义一个1-m,将目标定义为1-1。



 类似资料:
  • 我目前正在使用Java EE/Eclipselink和PostgreSQL开发一个web应用程序。关于我的实体,我特别管理“Project”、“User”和“Right”(读、写、删除等访问权限)。这些实体之间的关系是:一个项目可以有多个对该项目拥有不同权限的用户。因此,我得到了一个三重关联:Project+User+Right。 在这个协会坚持的过程中,我面临着一个恼人的问题。当我用它的信息持久

  • 我试图持久化一个非常简单的单向一对多关系,但EclipseLink(2.3.1)失败了。 服务类(父级):

  • 问题内容: 我在StackOverflow上遇到了类似的问题,尝试了解决方案,但没有找到答案。 我正在使用一种相当通用的JPA策略来设置某些实体的上次修改时间。设置列和字段,然后使用标记方法,并将其设置为等于当前时间。 问题是,我可以在调试器中看到正在调用该方法并且该字段正在更新,但是在我的数据库日志中,我仅看到一个SQL调用,以UPDATE更改字段,其中不包含timestamp字段的UPDATE

  • 我有一个类型的变量,其中item如下所示: 我想将其重新排序为,其中键是customerId,然后值是具有该客户ID的所有项的列表。

  • 问题内容: a = [1,1,1,2,3,4,4] >>> b = [1,1,2,3,3,3,4] 请注意,这不是一个相同的问题: 两个列表的Python交集保持重复 因为即使列表a中有三个1,列表b中也只有两个,所以结果应该只有两个。 问题答案: 您可以使用此方法,当您使用交叉路口时,它将为每个元素提供在任一列表中找到的最低计数。 输出 :

  • 问题内容: 我有一个Client和Affiliate类,它是从Person类继承的。正在使用联接的继承策略类型- 它们中的每一个都与父类共享主键。由于没有鉴别符列,我们选择使用DescriptorCustomizer和ClassExtractor。但是它并没有真正让人们知道它是如何工作的,而且代码似乎也没有编译。如果有人给出一个带有代码片段的漂亮示例以供理解,那将是很好的。 问题答案: 根据上述文