与self建立ManyToMany关系

时间:2015-03-18 09:34:28

标签: java mysql annotations many-to-many

Howsit,

我正在尝试在以下实体中创建@ManyToMany关系:

@Table
public class FormElement {

    @NotNull
    @Column
    private String label;

    @ManyToMany(targetEntity = FormElement.class, fetch = FetchType.LAZY)
    @JoinTable(joinColumns = {@JoinColumn(name = "form_element")}, inverseJoinColumns = {@JoinColumn(name = "depends_on_form_element")}, uniqueConstraints = @UniqueConstraint(name = "UK_FORMELEMENT_DEPENDECIES", columnNames = {"form_element", "depends_on_form_element"}))
    private Set<FormElement> dependencies = new HashSet<FormElement>();

}

我想要这个关系说的是FormElement可以有很多依赖,但同时依赖于我的许多FormElements(虽然我不需要这些数据)。现在,当在MySQL中生成表时,关系就在那里,但是没有应用唯一键。

我的意思是form_element_dependencies表包含这些关系(假设form_element表包含3个表单元素):

form_element | depends_on_form_element
--------------------------------------
2            | 1
3            | 2

然后我将3的依赖项更改为1,SQL抛出Duplicate entry '1' for key 'UK_7ya6hrxtosquk4vwmn0aefwyc'

如何设置@ManyToMany关系以便应用唯一键?

更新
这是正在创建的表。我可以看到UNIQUE KEY只被设置为depends_on_form_element,为什么这样,如果它是uniqueConstraints所指定的两列

CREATE TABLE `form_element_dependencies` (
  `form_element` bigint(20) NOT NULL,
  `depends_on_form_element` bigint(20) NOT NULL,
  PRIMARY KEY (`form_element`,`depends_on_form_element`),
  UNIQUE KEY `UK_s1g2g2d3bjcsv2j2lq143waki` (`depends_on_form_element`),
  KEY `FK_s1g2g2d3bjcsv2j2lq143waki` (`depends_on_form_element`),
  KEY `FK_osijq8sp1c5b8fskq8u4afk87` (`form_element`),
  CONSTRAINT `FK_osijq8sp1c5b8fskq8u4afk87` FOREIGN KEY (`form_element`) REFERENCES `form_element` (`id`),
  CONSTRAINT `FK_s1g2g2d3bjcsv2j2lq143waki` FOREIGN KEY (`depends_on_form_element`) REFERENCES `form_element` (`id`)
)

提前致谢, 格兰特

0 个答案:

没有答案