Есть ли простой способ конвертировать критерии в HQL?

Я несколько дней назад опубликовал вопрос о Querying для коллекций с API-интерфейсом Criteria, и после всех ответов, которые, как я вижу, невозможна то, что я пытаюсь выполнить с критериями, есть ошибка для ситуации в nhibernate, а также в спящем режиме

Я использовал DetachedCriteria, чтобы собрать все критерии, и список действительно длинный. Последний круг цепочки - это глючные критерии, поэтому мне нужно изменить все мои detachedcriteria на HQL.

Поэтому мой вопрос заключается в том, есть ли какой-либо инструмент или способ преобразования критериев в HQL.

или же

Есть ли способ заставить Критерии и Hql работать вместе?

Статья об ошибке в nhibernate

Ответы

Ответ 1

Я отправил электронное письмо Ayende Rahien по этому вопросу и поблагодарил его за ответ. Он сказал, что

ответ заключается в том, что такого инструмента нет, но преобразование обычно довольно просто.

Ответ 2

перестановка с форумов hibernate... не уверен, что это актуально для nhibernate или обновлено


from: max Команда Hibernate

Добавлено: Вс Дек 24, 2006 7:12 утра

Это очень упрямый фольклор, который критерии переводится в HQL. Критерии идут непосредственно на SQL, но нет прямого публичного api, чтобы получить его программным способом.

...

перевод дважды не очень эффективен;)

http://forum.hibernate.org/viewtopic.php?t=968990&view=next&sid=50454aa6cec8d482198117fbd398ca70

Ответ 3

Я изменил API-интерфейс Hibernate, чтобы генерировать запросы JPQL, пытаясь сохранить интерфейс в основном похожим. Название моего проекта - Criteria2JPQL:

https://sourceforge.net/projects/criteria2jpql/

Поскольку этот перевод является простой операцией в памяти, которая генерирует стандартный запрос JPQL, проблема с большой производительностью не возникает. С другой стороны, идея этого проекта возникла из плохих исполняемых запросов sql в Hibernate Critera, включая множество ненужных объединений. Мы испытали использование Criteria2JPQL в нашем проекте в моей компании и заметили, что эти ненужные соединения исчезли.

Ответ 4

Какую версию nHibernate вы используете? Я думаю, что использование последней версии может решить вашу проблему, так как 2.0 GA имеет множество изменений.