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`)
)
提前致谢, 格兰特