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
в двунаправленное отображение.
Это потому, что не обязательно использовать функцию автоматического DDL Hibernate. У вас могут быть инкрементные сценарии обновления схемы, а аннотации, связанные с схемой, будут бесполезны. Честно говоря, мы используем их для тестирования интеграции памяти.
Как вы указали, JoinColumn должен указать ограничение уникальности.