Ну я немного смущен, потому что я просто не могу найти какое-либо решение по моей проблеме (может быть какой-то затемнение)JPA - обновление объектов в OneToMany-отношений
Допустим, у меня есть следующие (упрощенно) Сущности:
@Entity
public class Employee {
@Id
private long id;
@OneToMany(mappedBy="owner")
private Collection<Phone> phones;
}
@Entity
public class Phone {
@Id
private long id;
@ManyToOne
private Employee owner;
}
и у меня есть телефона объект, управляемый JPA. А теперь я хочу, чтобы изменить Сотрудник этого телефона объекта с чем-то вроде этого:
phone.setEmployee(otherEmployee);
Я думал, что JPA обновит соответствующий сотрудник будет обновляться тоже. Я ошибаюсь? Я экспериментировал с аннотациями @ManyToOne и @OneToMany (cascade = CascadeType.ALL, orphanRemoval = true), но он не работает.
Должен ли я обновлять объект Employee самостоятельно? К сожалению, я не нашел этого случая ни в одном учебнике, ни в другом примере, поэтому я надеюсь, что вы можете рассказать мне больше, я смущен. Заранее спасибо.
Редактировать, чтобы сделать его еще более ясным:
Phone phone = new Phone();
Employee employee = new Employee();
phone.setEmployee(employee);
em.persist(employee);
em.persist(phone);
employee.getPhones(); //the phone object should be included here.
Поскольку вы не удаляете, 'CascadeType.REMOVE' не принесет вам никакой пользы. Попробуйте вместо 'CascadeType.PERSIST' вместо' CascadeType.ALL'. Кроме того, я полагаю, что вы сохраняете объект 'phone' после того, как вы изменили отношение« Сотрудник », правильно? – Darwind
Правильно, у меня был CascadeType.ALL, но, к сожалению, это не решение (теперь я отредактировал его для ясности). ** телефон ** с его владельцем был сохранен в БД и был прочитан 'em.find (...)'. И теперь я хочу изменить владельца. (И, конечно же, необходимо обновить соответствующий объект Employee-объекта) – Cyboot
Итак, изменив владельца на другой объект «Сотрудник», вы вызвали em.merge (телефон) ;? – Darwind