我正在尝试使用JPA2.1和Hibernate 4.3.7将实体键与实体值映射映射到数据库。 这是我的代码:
@Entity
@Audited
class Form{
//id
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "form_content",
joinColumns = @JoinColumn(name = "id_form", nullable = false),
inverseJoinColumns = @JoinColumn(name = "id_field_content"/*non-working part start*/, unique = false, nullable = true/*non-working part stop*/),
uniqueConstraints = { @UniqueConstraint(columnNames = { "id_field", "id_form" }) })
@MapKeyJoinColumn(name = "id_field", nullable = false)
private Map<FormEntryDefinition, FormEntryValue> content;
//getters, setters, equals, etc.
}
Hibernate生成表
form_content(
id_form bigint primary key not null,
id_field_content bigint <!-- problem start -->not null unique <!--problem stop -->,
id_field bigint primary key not null)
在所有3个字段中都有适当的外键。
有人能告诉我,为什么hibernate会生成唯一且非空的约束,所以我不能使用可空值来持久映射?
该问题是否有解决方法?
答案 0 :(得分:1)
唯一约束是由于使用@OneToMany
关联。如果将其更改为@ManyToMany
,则不再需要唯一约束。
连接表FK列仅对非可空列有意义。连接表中的一行是两个表之间的链接,如果缺少一个FK,则无论如何关联都会中断,它等同于首先没有链接行。