2015-05-27 1 views
2

У меня возникли проблемы с получением моего слияния для каскадирования вниз при появлении новых дочерних объектов. Я родительский объект (город) с набором дочерних объектовКак скомпоновать 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); есть ли способ добавить новые?

Благодаря

+0

Это зависит от того, как вы пытаетесь сохранить или объединить коллекцию и родителя. Поскольку у вас есть двунаправленное сопоставление, вам необходимо иметь двунаправленную ассоциацию, например 'parent.getChildren(). Add (newChild);' и newChild.setParent (parent); ' –

+0

В настоящее время я просто вызываю em.merge() on родительский объект. Есть ли способ, чтобы менеджер объектов позаботился об этом автоматически? Как это происходит с сиротами? – mike

+0

Эта ссылка может быть немного полезной для вас. http://blog.xebia.com/2009/03/23/jpa-implementation-patterns-saving-detached-entities/ –

ответ

0

я не знаю, если это так, но со мной, работаю только тогда, когда я ставлю аннотации в Hibernate в выше переменных атрибутах себя, а не на методах геттерных.

0

Что сработало для меня, было «вручную», сберегая сначала улицу, а затем город.

+0

это ответ? – Anptk