как получить многоразовые критерии гибернации.? - PullRequest
3 голосов
/ 06 сентября 2010

Как клонировать критерий объекта?

Я создал объект Criteria для объединения нескольких таблиц и применения нескольких ограничений. Затем мне нужно общее количество записей на основе примененных ограничений. Затем мне нужно применить детализацию нумерации страниц (с помощью набора maxList) и получить список объектов.

    Criteria criteria = session.createCriteria(Property.class, "property")
                    .createAlias("property.propertyType", "type").createAlias(
                            "property.propertyConcern", "propertyConcern",
                            CriteriaSpecification.LEFT_JOIN).createAlias(
                            "propertyConcern.concern", "concern",
                            CriteriaSpecification.LEFT_JOIN).setResultTransformer(
                            CriteriaSpecification.DISTINCT_ROOT_ENTITY);


criteria = addMultipleSeachCriteria(criteria, condition);
    criteria.setFirstResult(
                        pageCriteria.getFirstRecordOfCurrentPage())
                        .setMaxResults(pageCriteria.getRecordsPerPage());

criteria.addOrder(pageCriteria.isSortDescending() ? Order
                            .desc(pageCriteria.getSortBy()) : Order
                            .asc(pageCriteria.getSortBy()));

Когда я запускаю это, я получаю результаты, как я ожидал. Но мне нужно получить количество записей для примененных ограничений, не применяя порядок и setmaxResults.

Ответы [ 2 ]

6 голосов
/ 06 сентября 2010

Это было достигнуто путем сброса результата проецирования,

pageCriteria.setTotalRecords(((Integer) criteria
                            .setProjection(Projections.rowCount())
                            .uniqueResult()).intValue());
//Reset
criteria.setProjection(null);
criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);

Но я не уверен, что это сбой в любом другом случае.

0 голосов
/ 06 сентября 2010

Вот как я это делаю в NHibernate

DetachedCriteria newCriteria = CriteriaTransformer.TransformToRowCount(criteria);

Более того, если вы хотите добавить какую-либо другую информацию, такую ​​как SUM, вы можете добавить ее с проекциями, например:

newCriteria.SetProjection(Projections.ProjectionList()
                                         .Add(Projections.RowCount(), "rows")
                                         .Add(Projections.Sum("TaxAmount.Decimal"))
                                         .Add(Projections.Sum("NetAmount.Decimal"))
                                         .Add(Projections.Sum("GrossAmount.Decimal")));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...