Привет. Может ли кто-нибудь помочь мне создать базу критериев на основе следующей информации.
В основном этот код будет добавлен в функцию, которая возвращает количество найденных строк с
количество дочерних строк больше 10. Значение 10 будет динамическим.
Я уже несколько дней сталкиваюсь с этой проблемой и мне нужна помощь.
Обратите внимание, что я не могу управлять самой базой данных, поэтому я не могу использовать представления или изменять схему базы данных. Также это упрощенная версия проблемы, другие свойства client и mapfields опущены, а создание проекций и критериев будет реорганизовано в универсальный вспомогательный метод.
public class client
{
private int id;
private string code;
@OneToMany(fetch=FetchType.Lazy)
@JoinColumn(name="code", nullable=true)
private List <MapFields> mapFields;
}
public class MapFields
{
private int id;
private string code;
}
Как я могу сделать этот SQL-запрос, используя критерии гибернации.
SELECT COUNT(*)
FROM
(
SELECT MapFields.code
FROM Client LEFT JOIN MAPFields on Client.code
GROUP BY MapFields.code
HAVING COUNT(MapField.code) > 10
) AS A
Я пробовал следующее, но безрезультатно. Я продолжаю сталкиваться с исключением, которое говорит мне, что свойство не может быть разрешено.
org.hibernate.QueryException: не удалось разрешить свойство: numberOfMapFields of: ... Client
Criteria criteria = getCurrentSession().createCriteria(Client.class)
criteria.createAlias("mapFields", "mapFields", CriteriaSpecification.Left_Join)
ProjectionList pl = Projections.projectionList();
pl.add(Projections.count("mapFields.code", "numberOfMapFields"));
pl.add(Projections.rowCount());
criteria.setProjection(projectionList);
criteria.add(Restriction.ge("numberOfMapFields", "10"))
criteria.list();
ПОЖАЛУЙСТА, кто-нибудь может предоставить фрагмент кода о том, как сделать это, используя критерии гибернации, и если вам нужна дополнительная информация, просто скажите мне, и я постараюсь предоставить дополнительную информацию.