Критерии гибернации SubSelect в предложении select - PullRequest
2 голосов
/ 17 января 2012

Здравствуйте, у парня возникли проблемы с написанием запроса на выборку с помощью API критериев sublselect должен принимать параметр из выбранного q

SELECT c.file_id as fid, s.person as person, s.fax_no as fax, s.phone_no as phone,(SELECT SUM( b.ammount )
FROM billing b
WHERE b.constants_file_id = c.file_id
) - (
SELECT
CASE
WHEN b.partioa_pay IS NULL
THEN  "0"
ELSE SUM( b.partioa_pay )
END
FROM billing b
WHERE b.constants_file_id = c.file_id ) AS totalout
FROM constants c
LEFT JOIN firm_management s ON c.firm_management_firm_managment_id = s.firm_managment_id
WHERE s.firm_managment_id = ?

Как вы видите итоговую сумму, выбранную для c.file_id Я играл с этим в течение 2-х дней, и мне не повезло, Мэйби, кто-то из сообщества stackoverflow, обладающий сильным знанием Java и гибернации, сможет мне помочь .. Это то, что я получил за исключением 2012-01-17 01: 48: 06,808 ОШИБКА [org.hibernate.util.JDBCExceptionReporter] - (сессия F2C61D08758E0AA09CA6C99A5B6F2145, поток 113 вызывает ByDefenceFirm.getByDefenceFirm) * 1004

Criteria crit = session.createCriteria(Constants.class, "co");
              crit.createAlias("co.provider", "pr", Criteria.INNER_JOIN)
         .createAlias("co.firmManagement", "ins", Criteria.LEFT_JOIN)
         .createAlias("co.law", "lw", Criteria.LEFT_JOIN)
         .createAlias("co.billing", "bl", Criteria.LEFT_JOIN)
         .setProjection(Projections.projectionList()
        .add(Projections.property("co.fileId"))
    .add(Projections.property("co.status"))
    .add(Projections.property("co.asi"))
    .add(Projections.property("pr.name"))
    .add(Projections.property("ins.companyName"))
    .add(Projections.property("lw.shortName")));

              DetachedCriteria valueCrit = DetachedCriteria.forClass(Billing.class, "bl")
                          .setProjection(Projections.sum("bl.ammount"))
                          .setProjection(Projections.property("bl.constants"))
                                  .add(Restrictions.eqProperty("bl.constants", "co.fileId"));        
              crit.add(Property.forName("co.fileId").eq(valueCrit));
              crit.setProjection(Projections.property("co.billing"));
              crit.add(Restrictions.eq("lw.lawOfficeId", prid));
resultList = crit.list(); 

Если у кого-нибудь есть какие-либо предложения, он будет очень признателен.

Ответы [ 2 ]

4 голосов
/ 17 января 2012

Подбрать в предложении выбора невозможно с критериями. Вам придется использовать HQL или SQL-запрос.

0 голосов
/ 10 февраля 2013

Это возможно.По крайней мере, теперь с текущей версией Hibernate.Используйте "Restrictions.sqlRestriction ()".

Например:

Criteria accountCriteria = getCurrentSession().createCriteria(Account.class);
accountCriteria.add(Restrictions.sqlRestriction("{alias}.field IN (SELECT ......)"));
@SuppressWarnings("unchecked")
List<Account> accounts = accountCriteria.list();

Извините, я не внимательно прочитал вопрос.Ваш сценарий другой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...