JPA, не сохраняющий внешний ключ к @OneToMany отношению

об этом уже говорилось в https://github.com/hashicorp/consul/issues/4977 , причем целевая функция была включена в выпуск 1.4.4 (дата появления)

18
задан Wrench 4 May 2018 в 01:58
поделиться

2 ответа

Вы должны сами управлять отношениями Java. Для такого рода вещей вам нужно что-то вроде:

@Entity
public class Contact {
  @Id
  private Long id;

  @OneToMany(cascade = CascadeType.PERSIST, mappedBy = "contact")
  private List<Phone> phoneNumbers;

  public void addPhone(PhoneNumber phone) {
     if (phone != null) {
        if (phoneNumbers == null) {
            phoneNumbers = new ArrayList<Phone>();          
        }
        phoneNumbers.add(phone);
        phone.setContact(this);
     }
  }

  ...
}

@Entity
public class Phone {
  @Id
  private Long id;

  @ManyToOne
  private Contact contact;

  ...
}
27
ответ дан 30 November 2019 в 07:23
поделиться

В ответ на ответ Клетуса. Я бы сказал, что важно иметь аннотацию @column в полях идентификаторов, а также все элементы последовательности. Альтернативой использованию параметра mappedBy в аннотации @OneToMany является использование аннотации @JoinColumn .

Как своего рода в стороне ваша реализация addPhone нуждается в рассмотрении. Вероятно, это должно быть что-то вроде.

public void addPhone(PhoneNumber phone) {
    if (phone == null) {
        return;
    } else {
        if (phoneNumbers == null) {
            phoneNumbers = new ArrayList<Phone>();
        }
        phoneNumbers.add(phone);
        phone.setContact(this);
    }
}
6
ответ дан 30 November 2019 в 07:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: