gpt4 book ai didi

java - 使用条件 API 进行复杂的 hibernate 查询

转载 作者:行者123 更新时间:2023-12-01 15:22:11 25 4
gpt4 key购买 nike

我正在尝试使用条件 API 编写复杂的查询。我需要一些帮助。

我有 3 个类:Assets、AssetComponent 和 Tasks。 Task 类与 AssetComponent 具有 1 对 M 的关系,AssetComponent 与 Asset 具有 1 对 M 的关系。我需要找到所有与某些任务关联的 Assets (它应该是唯一的列表)(该任务有一个组件,并且该组件知道它所连接的 Assets )。

这就是我目前所拥有的

public List<Asset> retrieveTask(Project project, boolean assigned) {

DetachedCriteria subquery = DetachedCriteria.forClass(Task.class);

subquery.add(Restrictions.eq("project", project));
if (assigned) {
subquery.add(Restrictions.isNotNull("assignedTo"));
} else {
subquery.add(Restrictions.isNull("assignedTo"));
}

subquery = subquery.createCriteria("component");
subquery.add(Restrictions.isNotNull("asset"));

Criteria criteria = super.createCriteria();
criteria.add(Subqueries.in("id", subquery));

return criteria.list();
}

deataced 查询应返回所有已分配 Assets 且属于给定项目的任务。现在我需要了解所有这些任务的独特 Assets 是什么。

谢谢你帮我解决这个问题。

干杯

最佳答案

有点盲目,但这对您有何作用:

public List<Asset> retrieveTask(Project project, boolean assigned) {

DetachedCriteria subquery = DetachedCriteria.forClass(Task.class);

subquery.add(Restrictions.eq("project", project));
DetachedCriteria assetCriteria = subquery
.createCriteria("component")
.createCriteria("asset").setProjection(Projections.groupProperty("id"));

Criteria criteria = super.createCriteria();
if(assigned) {
criteria.add(Subqueries.propertyIn("id", subquery));
}
else {
criteria.add(Subqueries.propertyNotIn("id", subquery));
}
return criteria.list();
}

关于java - 使用条件 API 进行复杂的 hibernate 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10742334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com