Уникальное ограничение в двунаправленном отображении OneToOne

1

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
jpa
one-to-one
hibernate-mapping

1 ответ

1
Лучший ответ

Это потому, что не обязательно использовать функцию автоматического DDL Hibernate. У вас могут быть инкрементные сценарии обновления схемы, а аннотации, связанные с схемой, будут бесполезны. Честно говоря, мы используем их для тестирования интеграции памяти.

Как вы указали, JoinColumn должен указать ограничение уникальности.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню