Диалект в спящем - PullRequest
       2

Диалект в спящем

6 голосов
/ 16 декабря 2010

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

Например, предположим, что мы используем базу данных MySQL, тогда нам нужно ниже dialect: org.hibernate. У меня вопрос: какой механизм используется hibernate для генерации запроса на основе базы данных?

Ответы [ 2 ]

9 голосов
/ 16 декабря 2010

Не уверен, что понял ваш вопрос, но я попробую :-)

Сначала есть некоторые вещи, которые работают во всех базах данных, в то время как другие вещи специфичны для некоторых баз данных(например, «какова текущая дата и время?»).Для вещей, которые работают во всех базах данных, нет ничего действительно специфического для диалектов.

Но для всех частей, которые могут отличаться от базы данных к другой, Hibernate использует диалект.Диалект является «помощником» для Hibernate для связи с базой данных на ее языке.Например, в какой-то момент код Hibernate должен знать, какой тип данных базы данных для типа JDBC "Types.TIMESTAMP".«Базовый» код Hibernate просто говорит «дай мне все, что эквивалентно этой базе данных Types.TIMESTAMP», и конкретный диалект отвечает на это.

То же самое происходит для генерации SQL (или генерации запросов, как вы и просили).Hibernate знает базовую структуру, но также предоставляет некоторые хуки в диалекте, так что конкретный диалект может сказать «я не поддерживаю функцию X» или «для функции Y использовать строку« abc »в запросе».

Конечно, мой ответ - предельное упрощение всего процесса.Я рекомендую прочитать код для Dialect.java и, например, MySQLDialect.java.Таким образом, вы можете иметь представление о том, как Hibernate структурирует (и даже как он потребляет) часть этой информации:

https://github.com/hibernate/hibernate-orm/blob/master/hibernate-core/src/main/java/org/hibernate/dialect/Dialect.java

https://github.com/hibernate/hibernate-orm/blob/master/hibernate-core/src/main/java/org/hibernate/dialect/MySQLDialect.java

3 голосов
/ 08 июня 2012

Если мы используем диалекты в Hibernate, любой запрос в Hibernate будет преобразован в запрос к базе данных, независимо от типа базы данных.А Hibernate поддерживает запросы HQL, внутренне эти запросы HQL будут преобразованы в собственные вызовы базы данных SQL.

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