データベースにツリーを構築するこのオブジェクトがあります。各ノードはその親を指すか、null です。この関係を双方向にする必要があるため、各ノードはその子ノードも認識します。ノードが削除されると、IS_ACTIVE が false に設定されます。IS_ACTIVE が true に設定された子のみが読み込まれるように、これらの注釈を変更するにはどうすればよいですか?
@Entity
@Table(name = "node")
public class Node {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PARENT_NODE_ID")
private Node parentNode;
@OneToMany(mappedBy = "parentNode", fetch = FetchType.LAZY)
private Set<Node> childrenNodes;
@Column(name = "IS_ACTIVE", nullable = false)
private boolean isActive;
//other fields that shouldn't matter left out.
}
現在、単体テストは同じトランザクションで実行されているため、session.refresh(node) を使用して子ノードをまったくロードする必要がありますが、すべての子ノードをロードするたびに、フィルタと where 句を無視します。
このクラスに注釈を付けて、子がアクティブな子のみをロードする正しい方法は何ですか?
子供たちが怠け者であるかどうかは問題ですか?
*これに対する回答を検索していることに注意してください。
例として、この質問は関連しているように見えますが、解決策は機能しません。私の結合は自己参照であるため、それは異なると思います...しかし、それは私が見逃している何かが原因である可能性があります。@OneToMany 関連付けの結果をフィルタリングするための注釈