Критерии гибернации уникальный результат (столбец кроме ключа) - PullRequest
2 голосов
/ 22 ноября 2010

В настоящее время я использую Критерии гибернации для возврата списка результатов (фильтрация по различным значениям столбцов), но несколько объектов имеют одно и то же значение для одного из атрибутов, и мне нужен только один «представитель» для каждого.

Например: мне возвращен список из 3 объектов транспортного средства с идентификаторами / первичными ключами 123, 456, 789 и кодами производителей: 111, 111, 222. Я хотел бы только вернутьсписок с двумя объектами: 123/111, 789/222.

Есть ли способ добавить ограничение в Критерии гибернации, чтобы в этом примере возвращать только уникальный (или первый) результат кода производителя?Пожалуйста, дайте мне знать, если вам нужна дополнительная информация / разъяснения.

Спасибо за любые предложения!

Ответы [ 2 ]

1 голос
/ 22 ноября 2010

Самый простой подход - реализовать соответствующий ResultTransformer и применить его к вашему запросу.

Если вы действительно хотите, чтобы он выполнялся на стороне базы данных, вам нужно немного сложнеезапрос, такой как этот (в HQL / JPQL для краткости):

SELECT v FROM Vehicle v 
WHERE v.id = 
    (SELECT MIN(sv.id) FROM Vehicle sv WHERE sv.manufacturerCode = v.manufacturerCode)
1 голос
/ 22 ноября 2010

Если вы используете JPA с Hibernate, вы можете использовать что-то вроде ниже:

Query q = em.createQuery("select cat from DomesticCat cat");
q.setMaxResults(1);
List cats = q.getResultList(); //return any one cat from matched rows

Теперь просто получите 1-й предмет из списка.Кстати, позаботьтесь о NullPointerException и проверьте размер списка, прежде чем делать какие-либо дальнейшие операции.

Иначе, если вы используете Hibernate без JPA .Вы можете перейти к следующему [ uniqueResult () ]:

Query query =session.createQuery("select ao from AccountOwner ao ");
AccountOwner ao=query.uniqueResult();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...