3

product_template、product_account、product_style、product_account はテーブルです。mysql コマンド:

select distinct product_template.id as ptid from product_account inner join product on product_account.productId=product.id inner join product_style on product.productStyleId=product_style.id inner join product_template on product_style.productTemplateId=product_template.id where product_account.sellerId=1 and product_account.productAccountType=1;

Mysql コマンドは正常に動作していますが、基準に実装する方法がわかりません。
私のコード:

Criteria c = createCriteria(ProductAccount.class);
ProjectionList projectionList = Projections.projectionList();
c.add(Restrictions.eq("seller", query.getSeller()));
c.add(Restrictions.eq("productAccountType", query.getProductAccountType()));
c.createCriteria("product").createCriteria("productStyle").createCriteria("productTemplate");
c.setProjection(Projections.distinct(Projections.property("id")));
List<Object> objects = c.list();

product_account の ID しか取得できませんが、product_template の ID が必要です。いずれかをいただければ幸いです。前もって感謝します。

4

2 に答える 2

3

これを

Criteria c = createCriteria();
c.add(Restrictions.eq("seller", query.getSeller()));
c.add(Restrictions.eq("productAccountType", query.getProductAccountType()));
c.createCriteria("product").createCriteria("productStyle").createCriteria("productTemplate", "pt");
c.setProjection(Projections.distinct(Projections.property("pt.id")));
List<Object> objects = c.list();
于 2013-06-26T13:06:08.047 に答える
1
Criteria c = createCriteria(ProductAccount.class);
c.add(Restrictions.eq("seller", query.getSeller()));
c.add(Restrictions.eq("productAccountType", query.getProductAccountType()));
c.createCriteria("product")
    .createCriteria("productStyle")
    .createCriteria("productTemplate", "pt"); //This needs an alias
c.setProjection(Projections.projectionList()
    .add( Projections.distinct( Projections.property("id") ) )
    .add( Projections.property("pt.id") )); //Add it to the projection list
List<Object> objects = c.list();

ところで、あなたのコードは既に動作していますか?最初の基準クラスが欠落していたためです。

于 2013-06-17T16:50:52.890 に答える