特定のプロパティに一致するすべてのオブジェクトを除外することにより、OQL (Object Query Language) でオブジェクトを選択する方法はありますか?
Category
オブジェクトに再帰的にアクセスするには、ルート カテゴリを取得するだけです。後で、 を通じてその children-property にアクセスしますFetchType.EAGER
。
ここで、カテゴリを削除するとき、実際には削除しませんが、deleted-property を true に設定します。これは、変更/削除されたカテゴリでうまく機能しますが、children プロパティにアクセスすると、削除されたカテゴリ オブジェクトがまだ取得されます。
root-Category を取得するための現在の OQL-Select は次のようになります。
SELECT c FROM Category c WHERE c.name = 'Root'
を持つすべてのカテゴリオブジェクトを除外する方法はありますCategory.deleted = true
か? children-property 内で削除された真のカテゴリが見つからないように、再帰的に意味しますか?
エンティティは次のようになります。
@Entity
@NamedQueries({
@NamedQuery(name = Category.FIND_CATEGORY_ROOT,
query = "SELECT c FROM Category c WHERE c.name = 'Root'")
})
public class Category implements Serializable {
private static final long serialVersionUID = 1L;
private static final String PREFIX = "Category.";
public static final String FIND_CATEGORY_ROOT = PREFIX + "findCategoryRoot";
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private boolean deleted;
@OneToMany(fetch = FetchType.EAGER)
private List<Category> children;
// More code here
}