我有一个类别树结构,使用带有 Eclipse 链接的 JPA。树中的每个类别都包含项目,我想选择所有类别及其项目数。
我继承的代码用于离线计算项目数,更新类别,并使用很酷的 JPA 技巧来选择类别,如下所示:
@Entity
@Table(name = "categories")
@NamedNativeQuery(name = "topLevel", query = "SELECT categories.* FROM categories WHERE categories.parent_id IS NULL")
public class Category {
@Id
private Long id;
private String name;
private Integer item_count;
private Long parent_id;
@JoinColumn(name = "parent_id")
private List<Categories> categories;
}
运行本机查询时 - 我在树结构中填充了所有类别。
但是,现在我有一个新过滤器,它不允许用户查看该类别中的所有项目。所以我不能再离线计算项目了。我尝试使用连接,以便可以在线计算,如下所示:
@NamedNativeQuery(name = "topLevel", query = "SELECT categories.*, count(*) as item_count FROM categories, items_to_categories WHERE categories.id = items_to_categories.category_id and some_user_specific_query and categories.parent_id IS NULL GROUP BY categories.id")
但这不会用正确的项目计数填充较低的级别。
由于我使用的是 Eclipse Link,因此无法使用此 JPA 实现中不支持的公式字段。
关于如何更改我的模型以使其正常工作的任何想法?
提前致谢!