0

OQL(对象查询语言)中是否有任何方法可以通过过滤掉与某个属性匹配的所有对象来选择对象?

要递归访问Category对象,我只需检索根类别。后来我通过FetchType.EAGER.

现在,当我删除一个 Category 时,实际上我并没有删除它,而是将 deleted-property 设置为 true。这适用于修改/删除的类别,但是当我访问 children-property 时,我仍然会得到已删除的 Category 对象。

我当前用于获取根类别的 OQL-Select 如下所示:

SELECT c FROM Category c WHERE c.name = 'Root'

有没有办法过滤掉所有具有的类别对象Category.deleted = true?我的意思是递归,这样我就不会在 children-property 中找到 deleted-true-Categories?

实体如下所示:

@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
}
4

1 回答 1

0

我认为你必须选择:

  1. 添加命名查询c.name = 'Root' and c.deleted = false
  2. 不要使用命名查询,只需使用普通entityManager.createNamedQuery并在那里添加过滤。

如果您的 JPA 提供程序处于休眠状态,您可以添加注释@Where(clause = 'c.deleted = false'),它将被添加到所有查询中。

于 2015-09-22T05:18:31.173 回答