1

カラーテーブルと関係のある商品テーブルがあります

製品には多くの色があります...exp:製品A:赤、緑、青、黄があります。

Product
-----------
ProductID
Name

Color
-----------
ProjectID
Color

少なくとも赤と緑を含む製品を見つけたい

動的サイズの場合は、name="doggy"も追加します

SQLステートメントは

select * from product pd where pd.ProductID = (select cr.productID from color cr where cr.color="RED" or cr.color="GREEN" group by  cr.productID having rowcount=2)
and name like '%doggy'

依存するサブクエリを使用せずに、基準を作成するにはどうすればよいですか。

リンクされた質問

1)基準、サブクエリ、Group By、およびその他

2)AND条件を使用した1対多の検索

ご覧のとおり、この問題に対する適切な解決策はありません。

4

1 に答える 1

1
DetachedCriteria colorCrit = DetachedCriteria.For(Product.class)
    .createAlias("colors","color")
    .add(Restriction.eq("color.color", "RED")
    .add(Restriction.eq("color.color", "GREEN")
    .SetProjection(new GroupByHavingProjection("id", Projections.count("id"), "=", 2));

Criteria criteria = createCriteria()
    .add(Subqueries.in("id", colorCrit)
    .list();

ここからgroupbyhaving実装を使用すると、次のようになります。

// (c) 2008-2010 FURTHeR Project, Health Sciences IT, University of Utah<br>
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.criterion.CriteriaQuery;
import org.hibernate.criterion.Projection;
import org.hibernate.criterion.PropertyProjection;

public class GroupByHavingProjection extends PropertyProjection
{
    private static final long serialVersionUID = -3316795021430206470L;

    private final Projection havingProjection;
    private final String groupByProperty;
    private String op;
    private Object value;

    public GroupByHavingProjection(final String groupByProperty, final Projection projection, final String op, final Object value)
    {
        super(groupByProperty, true);
        this.projection = projection;
        this.groupByProperty = groupByProperty;
        this.op = op;
        this.value = value;
    }
}
于 2012-07-13T07:18:22.643 に答える