2010-12-16 24 views
6

Hibernate es independiente de la base de datos. Entonces, cualquiera que sea la base de datos que usemos en nuestra aplicación, necesitamos establecer dialecto relacionado con esa base de datos.Dialecto en Hibernate

Por ejemplo, supongamos que estamos utilizando base de datos MySQL, entonces necesitamos a continuación dialecto: org.hibernate.dialect.MySQLDialect

Supongamos que estamos utilizando la base de datos de SQL Server, entonces necesitamos a continuación dialecto: org.hibernate .dialect.SQLServerDialect

Hibernate generará la consulta adecuada relacionada con esa base de datos. Mi pregunta es: ¿Qué mecanismo usa hibernate para generar consultas basadas en la base de datos?

Respuesta

9

No es seguro de haber entendido su pregunta, pero voy a tratar :-)

En primer lugar, se algunas cosas que funciona en todas las bases de datos, mientras que otras cosas son específicos para algunas bases de datos (como "lo que es la fecha y hora actual? "). Para cosas que funcionan en todas las bases de datos, no hay nada realmente específico para los dialectos.

Pero para todas las partes que pueden ser diferentes de una base de datos a otra, Hibernate usa el dialecto. Dialect es un "ayudante" para que Hibernate se comunique con la base de datos en su idioma. Por ejemplo, en algún punto, un código de Hibernate necesita saber cuál es el tipo de datos de la base de datos para el tipo JDBC "Types.TIMESTAMP". El código "central" de Hibernate simplemente dice "dame lo que sea el equivalente de este DB de Types.TIMESTAMP", y el dialecto específico responde a eso.

Lo mismo ocurre con la generación de SQL (o la generación de consultas, como usted solicitó). Hibernate conoce la estructura básica, pero también proporciona algunos ganchos en el dialecto para que un dialecto específico pueda decir "No soporto la característica X", o "para la función Y, use la cadena 'abc' en la consulta".

Por supuesto, mi respuesta es una simplificación extrema de todo el proceso. Recomiendo leer el código para Dialect.java y, por ejemplo, MySQLDialect.java. De esta manera, se puede tener una idea sobre las estructuras de la forma en Hibernate (e incluso la forma en que se consume) parte de esta información:

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

si usamos dialectos en hibernación cualquier consulta en el Hibernate convertirse en consulta específica de la base de datos, independientemente del tipo de Base de datos. Y Hibernate admite consultas HQL, internamente estas consultas HQL se convertirán en llamadas SQL de base de datos nativas.

Cuestiones relacionadas