2013-02-22 3 views
3

Я пытаюсь создать приложение JPA. Я в основном имеютJPA Несколько отношений OneToMany с тем же объектом

@Entity 
public class Folder { 
    @Id 
    @GeneratedValue(strategy = GenerationType.TABLE) 
    private int id; 
    private String description; 
    private String name; 

    @OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST) 
    private List<AbstractItem> items = new LinkedList<AbstractItem>(); 

    @OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST) 
    private List<AbstractItem> items2 = new LinkedList<AbstractItem>(); 
    . 
    . 
    . 
} 

я могу успешно добавить один пункт в списке item, и сохраняются его. Однако, если я снова загружаю его, тот же объект объекта persistet находится в обоих списках items и items2.

Я попытался исправить это, добавив аннотацию @JoinTable, но я не мог заставить ее работать.

любые предложения?

+0

Здесь присутствует запах кода (дублирующее отображение и имя дублируемой переменной). * Что вы действительно пытаетесь выполнить? * – Perception

+0

Это был лишь небольшой пример, чтобы прояснить проблему. Фактическая настройка, в которой я столкнулся с проблемой, была бы большой, чтобы опубликовать здесь – Simiil

ответ

3

У вас должно быть две ссылки на «Папка» в вашем AbstractItem для каждого случая. Таким образом, значения mappedBy должны быть определены соответствующим образом, например .:

@OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST) 
    private List<AbstractItem> items = new LinkedList<AbstractItem>(); 

    @OneToMany(mappedBy = "parent2", cascade = CascadeType.PERSIST) 
    private List<AbstractItem> items2 = new LinkedList<AbstractItem>(); 
1

Ваш атрибут mappedBy ссылается на уникальное свойство с именем parent из AbstractItem, другими словами, вы ссылаетесь AbstractItem и Folder одним и тем же атрибутом.
Если вы наберете второй список как parent2, в AbstractItem будет находиться 2 внешних ключа до Folder.
Используйте две ассоциативные таблицы (для items и items2), если вы не хотите новое свойство и новый столбец в AbstractItem.

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