Hibernate Диалект - несоответствие

Я новичок в Hibernate. Читая Hibernate, я наткнулся на свойство Диалект. Какую бы базу данных мы не использовали в нашем приложении, нам нужно установить диалект, связанный с этой базой данных, и Hibernate сгенерирует соответствующий запрос, связанный с этой базой данных.

Мой движок базы данных - MySQL. Что произойдет в файле конфигурации гибернации, если я укажу диалект как "Oracle"?

1 ответ

Решение

Вы можете заставить Hibernate использовать определенный диалект, установив диалект в вашей конфигурации. Hibernate будет использовать диалект, который вы ему скажете. Если вы укажете диалект неправильно, то Hibernate попытается запустить (скорее всего) недопустимый SQL для целевой базы данных.

Поэтому, если вы подключаетесь к базе данных MySQL, но вы сказали, что Hibernate должен использовать диалект Oracle, Hibernate попытается выполнить запросы Oracle к MySQL. Для простых вещей это может сработать, но как только вы начнете получать более сложные запросы, SQL-код не будет синтаксически корректным и эффектно провалится.

Лучший вариант - просто не выбирать диалект. Hibernate автоматически выберет лучший диалект для использования на основе метаданных базы данных, которые получаются при настройке соединения. Это лучший выбор, потому что есть различия между похожими диалектами (MySQLDialect а также MySQL5Dialect на самом деле требуется другой формат SQL).

Однако это может немного вводить в заблуждение, потому что, если соединение с вашей базой данных не удается из-за неверных учетных данных /URL, сообщение трассировки стека:

org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set

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

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

Другие вопросы по тегам