У меня возникли проблемы с получением моего слияния для каскадирования вниз при появлении новых дочерних объектов. Я родительский объект (город) с набором дочерних объектовКак скомпоновать JPA вставить новые дочерние объекты для отношений OneToMany
@OneToMany(mappedBy = "parent", cascade = { CascadeType.ALL }, fetch=FetchType.LAZY)
public Set<Street> getStreets() {
return streets;
}
И дочерний объект (улица) ссылки на родительский
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="City", nullable=false)
public City getParentCity(){
return parentCity;
}
И я бегу в повседневной жизни, чтобы сбросить информацию в базу данных. Все хорошо и денди, пока JPA не запустится на новую улицу. Когда это дает мне EntityNotFoundException. Я предполагаю, что это означает, что в базе данных нет новой улицы с новым идентификатором. Из того, что я прочитал, это потому, что ребенок является фактическим владельцем транзакции, но мне нужно, чтобы он сохранял новый объект, если он сталкивается с этим исключением «EntityNotFound»
Я не использую автогенерируемый первичный key, Это ключ, который уже существует в наборе данных. В настоящее время у меня есть доступ к микросервису, который использует em.merge() для родительского объекта.
Я вижу, что есть возможность удалить объекты, которые больше не существуют (orphanRemoval); есть ли способ добавить новые?
Благодаря
Это зависит от того, как вы пытаетесь сохранить или объединить коллекцию и родителя. Поскольку у вас есть двунаправленное сопоставление, вам необходимо иметь двунаправленную ассоциацию, например 'parent.getChildren(). Add (newChild);' и newChild.setParent (parent); ' –
В настоящее время я просто вызываю em.merge() on родительский объект. Есть ли способ, чтобы менеджер объектов позаботился об этом автоматически? Как это происходит с сиротами? – mike
Эта ссылка может быть немного полезной для вас. http://blog.xebia.com/2009/03/23/jpa-implementation-patterns-saving-detached-entities/ –