Hibernate与数据库无关.因此,无论我们在应用程序中使用什么数据库,我们都需要设置与该数据库相关的方言.
例如,假设我们使用的是MySQL数据库,那么我们需要以下方言:org.hibernate.dialect.MySQLDialect
假设我们使用的是SQL Server数据库,那么我们需要以下方言:org.hibernate.dialect.SQLServerDialect
Hibernate将生成与该数据库相关的适当查询.我的问题是hibernate使用哪种机制来生成基于数据库的查询?
不确定我理解你的问题,但我会尝试:-)
首先,有一些东西在所有数据库中,而其他的东西都是具体的某些数据库(如"什么是当前的日期和时间?")的作品.对于在所有数据库中都有效的东西,没有什么特别的方言.
但对于可能与数据库不同的所有部分,Hibernate使用Dialect.Dialect是Hibernate以其语言与数据库通信的"帮手".例如,在某些时候,Hibernate代码需要知道JDBC类型"Types.TIMESTAMP"的数据库数据类型是什么.Hibernate的"核心"代码只是说"给我这个数据库相当于Types.TIMESTAMP的东西",而具体的Dialect就是答案.
SQL生成(或查询生成,如您所问)也是如此.Hibernate知道基本结构,但它也在Dialect中提供了一些钩子,以便特定的Dialect可以说"我不支持X特征",或者"对于特征Y,在查询中使用字符串'abc'".
当然,我的答案是整个过程的极端简化.我建议阅读Dialect.java的代码,例如,MySQLDialect.java.通过这种方式,您可以了解Hibernate如何构建(甚至消耗它们)一些信息:
| 归档时间: |
|
| 查看次数: |
15860 次 |
| 最近记录: |