Я пытаюсь реализовать какую-то древовидную структуру с помощью JPA.
У меня есть сущность «папка» и сущность «тест». Папка может содержать как папки, так и тесты. Тест не содержит ничего.
Тест и папка имеют суперкласс Node, выглядит так:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Node implements TreeNode, Serializable{
private Long id;
String description;
String name;
@ManyToOne
Node parent;
...getters, setters and other stuff that doesnt matter...
}
А вот класс Папки:
@Entity
public class Folder extends Node{
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(cascade=CascadeType.ALL, **mappedBy="parent"**)
List<Folder> folders;
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(cascade=CascadeType.ALL, **mappedBy="parent"**)
List<Test> tests;
...
}
Итак, основная проблема - это свойство mappedBy, которое относится к свойству суперкласса, не переопределенному в предке, потому что я получил такое исключение:
Exception while preparing the app : mappedBy reference an unknown target entity property: my.test.model.Folder.parent in my.test.model.Folder.folders
Там может быть какое-то хитрое отображение свойств «папок» и «тест» класса Folder, и мне нужна небольшая помощь в этом.
РЕДАКТИРОВАТЬ: я указал свойства папок и тестов класса Folder с targetEntity = Node.class:
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(cascade=CascadeType.ALL, mappedBy="parent",targetEntity=Node.class)
List<Folder> folders;
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(cascade=CascadeType.ALL, mappedBy="parent",targetEntity=Node.class)
List<Test> tests;
И он получает работу. Но работает не нормально. Теперь и тесты, и папки сопоставлены с обоими свойствами (я не знаю, почему я не получаю исключения), когда мне нужно получить их отдельно.
Так что я все еще ищу подходящие сопоставления для достижения этого. Я бы оценил любую помощь.