Java OneTONE双向映射中的唯一约束
在关系所有者的双向一对一映射中是否需要Java OneTONE双向映射中的唯一约束,java,hibernate,jpa,hibernate-mapping,one-to-one,Java,Hibernate,Jpa,Hibernate Mapping,One To One,在关系所有者的双向一对一映射中是否需要unique=true @Entity public class Customer { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; private String name; @OneToOne(cascade={CascadeType.PERSIST}) @JoinColumn(name="passport_id",
unique=true
@Entity
public class Customer {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String name;
@OneToOne(cascade={CascadeType.PERSIST})
@JoinColumn(name="passport_id", unique=true) //is unique=true required for bi-directional one-to-one mapping
private Passport passport;
public Passport getPassport() {
return passport;
}
}
@Entity
public class Passport {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@Column(name="passport_number")
private String passportNumber;
@OneToOne(mappedBy="passport")
private Customer customer;
public Customer getCustomer() {
return customer;
}
}
Hibernate文档指出,数据库中的FK列应被约束为唯一,以模拟一对一的多重性,但它没有在双向映射中添加
unique=true
。这是因为使用Hibernate自动DDL功能不是强制性的。您可以使用增量模式更新脚本,而与模式相关的注释将毫无用处。坦率地说,我们在内存集成测试中使用了它们
正如您所指出的,JoinColumn应该声明唯一性约束