Один-ко-многим: 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Один-ко-многим: JPA генерирует неправильный FK при использовании ddl-auto=create-drop
    Anonymous » » в форуме JAVA
    0 Ответы
    36 Просмотры
    Последнее сообщение Anonymous
  • Один-ко-многим: JPA генерирует неправильный FK при использовании ddl-auto=create-drop
    Anonymous » » в форуме JAVA
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Один-ко-многим: JPA генерирует неправильный FK при использовании ddl-auto=create-drop
    Anonymous » » в форуме JAVA
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Не загрязняет ли установка Spring.jpa.hibernate.ddl-auto=create-drop мой контекст?
    Anonymous » » в форуме JAVA
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Кажется, JPA Spring.jpa.hibernate.ddl-auto=update не работает
    Anonymous » » в форуме JAVA
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous

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