【发布时间】:2017-01-29 19:57:39
【问题描述】:
我违反了连接表的主键约束,它是由 EclipseLink 为以下类自动创建的:
@Entity public class Link {
@ManyToMany @OrderColumn
private List<Node> nodes; ...
@Entity public class Node {
@ManyToMany(fetch = FetchType.EAGER, mappedBy = "nodes")
private List<Link> links; ...
如果我在其节点的第一个和第二个位置插入具有相同节点的链接,则会发生违规。确实有一个带有 NODES_ID 和 LINKS_ID 的生成索引(缺少 NODES_ORDER)。我如何影响 EclipseLink 或其他提供者以省略或扩展此约束?
使用:Glassfish 4.1.1、EclipseLink 2.6.4 或 2.7.0(交叉发布)、Java 8
【问题讨论】:
-
你在哪里定义你的连接表?一个带有 ddl 表的小 sql 也会很有用
-
使用 JPA(约定优于配置)我不需要定义它。连接表 LINK_NODES 是在启动时自动创建的,但带有上述不需要的约束。
-
这可以通过将 javax.persistence.schema-generation.database.action 设置为 persistence.xml 中的 create-or-extend-tables 来实现。
-
发布连接表的 DDL?插入连接表的 SQL 在哪里?该列表是有序列表还是索引列表?
-
EclipseLink 不支持集合中的重复项。您可以尝试手动删除生成的 DDL 中的约束,然后从那时起使用脚本,但可能还有其他问题 - 请务必测试它是否适合您。
标签: jpa java-8 many-to-many eclipselink