JPAでツリーのような構造を実装しようとしています。「フォルダー」エンティティと「テスト」エンティティがあります。フォルダーには、フォルダーとテストの両方を含めることができます。テストには何も含まれていません。
test と folder の両方に 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...
}
そして、これが Folder クラスです。
@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 クラスの "folders" および "test" プロパティに対するトリッキーなマッピングがある可能性があり、それについて少し助けが必要です。
編集: targetEntity=Node.class を使用して、Folder クラスのフォルダーとテストの両方のプロパティを指定しました。
@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;
そして、それはうまくいきます。しかし、うまくいきません。テストとフォルダーの両方が両方のプロパティにマップされました (なぜ例外が発生しないのかわかりません)。それらを個別に取得する必要があります。
だから私はまだそれを達成するための適切なマッピングを探しています. 私はどんな助けにも感謝します。