2016-06-27 16 views
0

私は、SQL Serverでこれを書いている:Hibernateの基準select文でgroup by句を除くとは

DetachedCriteria dCriteria = DetachedCriteria.forClass(EquityTransaction.class) 
      .add(Restrictions.eq("clientCompany.id", sb.getClientCompany().getId())) 
      .add(Restrictions.le("transactionDate", sb.getQualifyDate())) 
      .setProjection(Projections.projectionList() 
        .add(Projections.max("processedTransaction.id"), "processedTransaction.id") 
        .add(Projections.groupProperty("holderCompanyAccount.id"))); 

select max(processed_trans_id) from EQUITY_TRANSACTION where transaction_date <= '2016-06-22' and company_id=75 group by comp_acct_id 

をしかし、私はこのように、Hibernateの基準で同じことを書くしようとすると、

私は休止状態からのSQLクエリとしてこれを取得:

select max(processed_trans_id), comp_acct_id from EQUITY_TRANSACTION where transaction_date <= '2016-06-22' and company_id=75 group by comp_acct_id 

私はHibernの元のSQLクエリーを複製するにはどうすればよいです基準を食べた?

+0

GROUP BY句のすべての列がとてもよく、明らかに、それは完全に真実ではない、SELECT句の列なしのSQL文を考慮することは非常に有効であるselect句 – ypp

+0

に 'comp_acct_id'を追加冬眠選択にする必要があります。 –

答えて

0

次のクエリを使用してこれを解決できました。チャームのように働いた!

DetachedCriteria dCriteriaEt1 = DetachedCriteria.forClass(EquityTransaction.class, "et1") 
        .add(Restrictions.eq("clientCompany.id", decldDvd.getClientCompany().getId())) 
        .add(Restrictions.le("transactionDate", decldDvd.getQualifyDate())) 
        .setProjection(Projections.projectionList() 
          .add(Projections.max("processedTransaction.id"), "processedTransaction.id")) 
        .add(Restrictions.eqProperty("et1.holderCompanyAccount.id", "et2.holderCompanyAccount.id")); 

      logger.info("Retrieving all qualified company account balances..."); 
      Criteria getQualifiedBalances = dao.getSession().createCriteria(EquityTransaction.class, "et2") 
        .add(Subqueries.propertyIn("processedTransaction.id", dCriteriaEt1)) 
        .add(Restrictions.gt("balance", 0l)) 
        .setProjection(Projections.projectionList() 
          .add(Projections.property("holderCompanyAccount.id"),"holderCompanyAccount.id") 
          .add(Projections.property("balance"), "balance")) 
        .addOrder(Order.asc("holderCompanyAccount.id")) 
        .addOrder(Order.desc("processedTransaction.id")) 
        .setResultTransformer(new AliasToBeanNestedResultTransformer(EquityTransaction.class)); 
関連する問題