JPA / Hibernateを使用しています。
フォルダーとファイルがあるとします。すべてのフォルダーには、より多くのフォルダーとファイルを含めることができます。すべてのファイルは、(親ではなく) ルート フォルダーが何であるかを認識しています。
@Entity
public class Folder{
...
@OneToMany
@JoinColumn("folder_id")
private List<Folder> folders;
@OneToMany
@JoinColumn("file_id")
private List<File> files;
...
}
@Entity
public class File {
...
@ManyToOne
private Folder rootFolder;
...
}
新しいファイルと新しいフォルダーを作成します。ファイルをフォルダに入れました。これで、ファイルはフォルダー「files」コレクションにあり、フォルダーはファイル「rootFolder」変数で参照されます。
これを永続化すると、「オブジェクトは保存されていない一時インスタンスを参照しています」または「フラッシュする前に一時インスタンスを保存します: entities.file.rootFolder -> entities.Category」(最初に永続化されるものによって異なります) を取得します。
これに注釈を付ける方法が必要なので、最初に何を保存しても機能します!? 他のエンティティを参照せずに最初のエンティティを挿入し、次に別のエンティティを挿入してから参照を挿入するようにプログラムで何らかの方法で回避できますが、ここでは必要ないと思います。
これを検索したのですが、@OneToMany に @ManyToOne を組み合わせたものしか見つかりませんでしたが、私の場合は使用できません。フォルダーは、それがルート フォルダーであるかどうかを認識すべきではありません。
チュートリアルに関するご意見やご指示をいただければ幸いです。