0

基準 API を使用して複雑なクエリを作成しようとしています。私はこれでいくつかの助けを使うことができます.

Assets、AssetComponent、および Tasks の 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();
}

detaced クエリは、アセットが割り当てられていて、特定のプロジェクトの一部であるすべてのタスクを返す必要があります。ここで、これらすべてのタスクに固有のアセットは何かを確認する必要があります。

これを手伝ってくれてありがとう。

乾杯

4

1 に答える 1

1

暗闇の中でのショットですが、これはどのように機能しますか?

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();
}
于 2012-05-24T17:46:26.513 に答える