Hibernate. ClassicQueryTranslatorFactory vs ASTQueryTranslatorFactory - PullRequest
7 голосов
/ 28 марта 2012

В чем разница между этими переводчиками запросов (я имею в виду различия для меня, как пользователя Hibernate). Некоторые блоги в Интернете говорят, что переводчик на базе ANTLR работает быстрее. Но я считаю, что если бы один из них был явно лучше, то разработчики Hibernate удалили бы другого. Итак ... в чем разница и почему у нас их обоих? В каких ситуациях я должен выбрать первый или второй? В каких ситуациях мне не следует выбирать одного из переводчиков?

1 Ответ

7 голосов
/ 28 марта 2012

Это внутренняя конфигурация гибернации ; который был реализован при обновлении до версии 3. Вам не стоит беспокоиться о его изменении до тех пор, пока для этого нет веской причины . Также с последними версиями я думаю, что вам нужно изменить значение по умолчанию. Но если вы хотите, вы можете проверить его на повышение производительности, как указано ниже.

Из Руководства по миграции ядра Hibernate: 3.0 ;

Изменение языка запросов

Новый анализатор - Hibernate3 поставляется с совершенно новым, основанным на ANTLR переводчиком запросов HQL / SQL. Однако парсер запросов Hibernate 2.1 по-прежнему доступен. Парсер запросов может быть выбран путем установки свойства Hibernate hibernate.query.factory_class. Возможные значения: org.hibernate.hql.ast.ASTQueryTranslatorFactory для нового анализатора запросов и org.hibernate.hql.classic.ClassicQueryTranslatorFactory для старого синтаксического анализатора. Мы прилагаем все усилия, чтобы новый анализатор запросов поддерживал все запросы, разрешенные Hibernate 2.1.

Однако мы ожидаем, что многим существующим приложениям потребуется использовать анализатор Hibernate 2.1 на этапе миграции. Синтаксис Hibernate 1.x «from f в классе bar.Foo» больше не поддерживается, используйте «from bar.Foo as f» или «from bar.Foo f». Не используйте точки в именованных именах параметров HQL. Примечание: существует известная ошибка, затрагивающая диалекты с помощью внешних объединений в тета-стиле (например, OracleDialect для Oracle 8i, диалект TimesTen, Sybase11Dialect). Попробуйте использовать диалект, который поддерживает соединения в стиле ANSI (например, Oracle9Dialect), или используйте старый анализатор запросов, если у вас возникли проблемы.

Вот форум пост и блог пост относительно этой проблемы.

Теперь перейдем к вашим вопросам;

в чем разница и почему у нас их обоих?

Как сказано в журнале изменений, hibernate 3 заменяет ClassicQueryTranslatorFactory на ASTQueryTranslatorFactory. Это внутреннее изменение, и пользователям не нужно беспокоиться об этом, пока оно не сломает ваше приложение.

В каких ситуациях я должен выбрать первый или второй? В каких ситуациях мне не следует выбирать одного из переводчиков?

По умолчанию ASTQueryTranslatorFactory включено, вы должны рассмотреть возможность его изменения, только если какой-либо из ваших запросов прервется при обновлении до версии 3.

Еще раз, это история прошлого (2006 или около того); последняя версия hibernate - 4.1, и переводчик запросов уже должен быть стабильным. Так что 99% вам не нужно ничего менять.

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