У меня есть очень простой отношения многие ко многим: человек и проектов, созданных следующим образом:Как настроить базовые отношения с японским JPA/Hibernate?
лицо:
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name = "person_project",
joinColumns = @JoinColumn(name = "Person_Id"),
inverseJoinColumns = @JoinColumn(name = "Project_id"))
private Set<Project> projects = new HashSet<Project>();
проекта:
@ManyToMany
@JoinTable(name = "person_project",
joinColumns = @JoinColumn(name = "Project_Id"),
inverseJoinColumns = @JoinColumn(name = "Person_id"))
private Set<Person> persons = new HashSet<Person>();
При обновлении Person, новые проекты могут быть указаны. У меня есть JPARepository, настроенный для Person, и я использую saveAndFlush (...), чтобы сохранить новые проекты с Person.
Это работает для одного человека. Если я добавлю новый проект, он будет правильно сохранен с Лицом и таблицами в обновлении базы данных. Однако, если я затем добавлю тот же проект для другого лица, он будет удален из первого лица! Идентификатор первого лица заменяется идентификатором второго лица в таблице соединений.
В чем причина этого? неверно ли моя установка ссылок?
Интересно. Я получил идею из примеров Pro Spring 3 Book, где это действительно было сделано таким же образом: одно и то же отображение с обеих сторон только с заменой столбцов. Я не могу найти аналогичный пример в Интернете, но я нашел несколько страниц, в которых упоминается, что «mappedBy» необходим для двунаправленных отношений и что однонаправленные отношения не будут содержать аннотаций на обратной стороне. Я немного смущен. – wannabeartist