【发布时间】:2011-02-22 20:23:59
【问题描述】:
我有一个 Hibernate/JPA 数据模型,可以让我将对象 (MyObj) 放入各种类别 (MyCategory)。每个类别可能有 0 个或多个子类别,以及没有分配给它们的分类 (MyClassification) 的类别。数据模型如下所示:
public class MyObj {
…
protected MyCategory category = null;
…
}
public class MyCategory {
…
protected MyClassification classification=null;
protected List<MyCategory> childCategories=null;
protected MyCategory parentCategory=null;
…
}
public class MyClassification {
…
}
我希望能够根据分类、类别或子类别查询 MyObj 实例。例如,如果我有 3 个分类(classA、classB 和 classC)和 6 个类别(例如 categoryA1、categoryA2、categoryB1 等,其中名称对应于分类)并且每个类别都有 3 个子类别(例如 subcatA1、 subcatA2、subcatA3、subcatB1 等)我想做这样的查询:
- 分类 classA 中的所有 MyObj 实例(无论类别或子类别)
- 类别 categoryA1 中的所有 MyObj 实例(不考虑子类别)
我创建了几个我认为可以完成此任务的 NamedQueries。它们适用于已将 MyObj 实例分配给子类别的实例。但是,如果我将 MyObj 实例放在一个类别(无子类别)中并基于类进行查询,我看不到它。我只看到子类别内的 MyObj 实例。我的查询如下所示:
MyObj.findByClass = "SELECT DISTINCT o FROM MyObj o WHERE (o.category.classification = :classification OR o.category.parentCategory.classification = :classification)"
MyObj.findByCategory = "SELECT DISTINCT o FROM MyObj o WHERE (o.category = :category OR o.category.parentCategory = :category)"
谁能告诉我这些查询的逻辑错误在哪里?有没有更好的方法来完成我所追求的?
【问题讨论】:
标签: hibernate jpa hql categories