2013-04-03 2 views
1

У меня есть ассоциация JPA @OneToMany с экземпляром Curriculum, имеющим несколько экземпляров WorkExperience.Сохранение/сохранение отношений сущности JPA до самого этого объекта

Curriculum JPA объект:

@Entity 
public class Curriculum { 
    ... 
    @OneToMany 
    private Set<WorkExperience> workExperiences; 
    ... 

WorkExperience JPA лицо:

@Entity 
public class WorkExperience { 
... 

Я изначально хотел упорствовать учебную программу вместе с WorkExperiences в одном EntityManager вызова методы сохраняется.

Однако, учитывая то, как я разработал поток действий веб-интерфейса, я теперь интересно, может ли другой сценарий не представляется возможным то есть:

  • сохраняются в WorkExperiences Д.Б. первым, а затем, когда пользователь заполнил в основных деталей учебного плана сущностей, чтобы:

  • установить существующие экземпляры WorkExperience (уже в дБ) к экземпляру учебного плана (не в дБ пока) и

  • сохраняется весь граф объектов: учебный план ш с его WorkExperiences.

Это имеет смысл? Я думал о нескольких минусах, например. что произойдет, если пользователь решит не сохранять экземпляр учебного плана? Как очистить висячие строки в таблице WorkExperience?

Есть ли альтернативы или лучшие образцы? Например, было бы хорошей идеей предварительно сохранить экземпляр учебного плана до того, как пользователь проверит форму?

ответ

2

Я бы определил каскад на Curriculum, так как WorkExperience кажется зависимым объектом.

Затем работайте с новыми/отдельными объектами в пользовательских интерфейсах/контроллерах, пока пользователь не решит подать (последнюю) форму. Затем сохраняйте Curriculum, и связанные с ним объекты WorkExperience будут сохранены также во время одного и того же транзакционного фиксации.

@OneToMany(cascade=CascadeType.ALL) 
private Set<WorkExperience> workExperiences; 
+0

Спасибо за ответ Костя. Хорошо, но где я храню отдельные экземпляры WorkExperience до того, как программа Curriculum будет наконец сохранена? – balteo

+0

@balteo Поместите их в 'Set' внутри отдельного объекта Curriculum, поэтому сохраняющийся будет каскадным. Я не знаком с Spring MVC, но я предполагаю, что у вас есть контроллер для вашего представления, который создается и имеет метод обработки форм. Этот контроллер должен хранить объект Curriculum до его сохранения. Для представлений, в которых пользователи создают новые сущности, я обычно создаю пустой объект во время создания контроллера, работаю на нем, а затем сохраняю его после успешной отправки. – kostja

+0

Умм. Весенние MVC-контроллеры являются одноточечными. Не стоит ставить государство в Синглтон. Я думал об использовании сессии для хранения, но это не очень хорошая идея ... – balteo

Смежные вопросы