Как определить, есть ли у экземпляра Criteria подкритерии? - PullRequest
2 голосов
/ 21 марта 2012

Я пишу поисковый интерфейс, в котором пользователь может выбирать из полей нескольких различных объектов.Это приложение Spring MVC (3.0.5), использующее Hibernate 3

Мой класс DAO должен иметь возможность гибко отвечать на эти запросы.Я хотел бы использовать такой подход:

critAliases = new ArrayList<String>();
...

Session session = (Session) getEntityManager().getDelegate();
crit = session.createCriteria(RootEntity.class);

// selected search options from user
for ( SearchOption opt: searchOptionList ) {
    if ( ! critAliases.contains(opt.getAlias()) ) {
        crit.addAlias(opt.getEntityName(), opt.getAlias(), opt.getJoinType());
        critAliases.add(opt.getAlias());
    }
}

Обратите внимание, что я должен отслеживать псевдонимы с переменной экземпляра

List<String> critAliases

в моем классе DAO.

Я бы предпочел спросить экземпляр Criteria, если он уже содержит подкритерии, соответствующие моей строке opt.getAlias ​​().Интерфейс Criteria предоставляет метод getAlias ​​(), который подходит для корневого объекта, но не имеет метода для проверки или вывода списка псевдонимов Criteria.

У кого-нибудь есть лучшее решение?

1 Ответ

1 голос
/ 21 марта 2012

Я думаю, что ваше текущее решение лучшее. Хотя CriteriaImpl имеет метод для итерации созданных подкритериев (createAlias ​​создаст подкритерии), этот метод не предоставляется интерфейсом (Criteria), поэтому его использование не будет «хорошим». Даже если бы это было так, я бы все же выбрал ваше решение (хотя я бы порекомендовал использовать Set вместо List для этого сценария).

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