Один-ко-многим: JPA генерирует неправильный FK при использовании ddl-auto=create-dropJAVA

Программисты JAVA общаются здесь
Anonymous
Один-ко-многим: JPA генерирует неправильный FK при использовании ddl-auto=create-drop

Сообщение Anonymous »

Кажется, я где-то допустил ошибку, но не могу понять где.
JPA настаивает на создании уникального ограничения для отношения FK «один-ко-многим» на дочерней стороне. Это ограничение не позволяет мне вставить более одной записи в дочернюю таблицу.
Родительский объект:

Код: Выделить всё

@Entity
@Table(name = "customer")
@Data
public class CustomerDto {
@Id
private Long id;

...

@Column(name = "notes")
private String notes;

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
@JoinColumn(name = "customer_id")
private List emails = new ArrayList();

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
@JoinColumn(name = "customer_id")
private List
 phones = new ArrayList();
}
Ребенок 1:

Код: Выделить всё

@Entity
@Table(name = "email")
@Data
public class EmailDto {
@Id
private Long id;

@Column(name = "email", unique = true, length = 128)
private String email;

@ManyToOne(fetch = FetchType.LAZY)
private CustomerDto customer;
}
Ребенок 2:

Код: Выделить всё

@Entity
@Table(name = "phone")
@Data
public class PhoneDto {
@Id
private Long id;

@Column(name = "phone_number", nullable = false, length = 32)
private String phoneNumber;

@OneToOne(fetch = FetchType.LAZY)
private CustomerDto customer;
}
Таблицы выглядят так, как я ожидал:
[img]https://i.sstatic.net /lG0nhCx9.png[/img]

Но это также создает дополнительное ограничение для внешнего ключа на стороне телефона:
Изображение

Таблица электронной почты выглядит нормально:
Изображение

Уникальный контент, который Hibernate генерирует на стороне телефона, позволяет мне вставить ТОЛЬКО ОДНУ запись для каждого клиента. Если я пытаюсь вставить два номера телефона, я получаю повторяющееся значение ключа, что нарушает уникальное ограничение "phone_customer_id_key".
Если я изменю определение JoinColumn в CustomerDto.java вот так:

Код: Выделить всё

@JoinColumn(name = "customer_id")
---> @JoinColumn(name = "customer_idx")
тогда это работает, и я могу правильно сохранить 0..* номеров телефонов для каждого клиента .
НО эта модификация создает дурацкую структуру таблицы:
[img]https:// i.sstatic.net/fzfS0jJ6.png[/img]

Чего мне здесь не хватает?
Я могу создать правильную структуру с помощью простых SQL-кодов и Я могу использовать customer_id в качестве внешних ключей в дочерних таблицах. Но почему JPA генерирует дополнительное неожиданное ограничение?

Подробнее здесь: https://stackoverflow.com/questions/787 ... reate-drop

Вернуться в «JAVA»