简体   繁体   English

休眠条件-在select语句中排除group by子句

[英]Hibernate Criteria - Excluding group by clause in the select statement

I've written this in sql server: 我已经在sql server中写了这个:

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

But when I try to write the same in Hibernate Criteria, like this: 但是,当我尝试在“休眠标准”中编写相同的代码时,如下所示:

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")));

I get this as the sql query from 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

How do I replicate the original SQL query in Hibernate criteria? 如何在Hibernate条件中复制原始SQL查询?

I was able to resolve this using the following query. 我可以使用以下查询解决此问题。 Worked like a charm! 像魅力一样工作!

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

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

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