繁体   English   中英

使用条件API的复杂休眠查询

[英]Complex hibernate query using criteria API

我正在尝试使用条件API编写复杂的查询。 我可以为此提供一些帮助。

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

这就是我到目前为止

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();
}

分离的查询应返回为其分配了资产并属于Give项目的所有任务。 现在,我需要查看所有这些任务的独特资产。

感谢您的协助。

干杯

在黑暗中拍了一下,但这对您有何作用:

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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM