我是休眠的新手。在阅读 Hibernate 时,我遇到了该Dialect
属性。无论我们将在应用程序中使用什么数据库,我们都需要设置与该数据库相关的方言,Hibernate 将生成与该数据库相关的适当查询。
只是想知道它是否是必须设置的属性?如果没有并且没有在hibernate.cfg.xml文件中指定,那么 Hibernate 将如何生成 SQL 查询,即将生成哪个数据库兼容的 SQL 查询?
不,根据文档http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/session-configuration.html#configuration-optional-dialects ,这不是强制性的 ,我没有尝试过。虽然您对其他观点的回答我也想从这里的一些经验丰富的人那里得到答案。:)
我认为这不是强制性的,但将其设置在您的hibernate.cfg.xml
as中是一个好习惯
<property name="dialect">your dialect</property>
可能的值:
DB2 org.hibernate.dialect.DB2Dialect
DB2 AS/400 org.hibernate.dialect.DB2400Dialect
DB2 OS390 org.hibernate.dialect.DB2390Dialect
PostgreSQL org.hibernate.dialect.PostgreSQLDialect
MySQL org.hibernate.dialect.MySQLDialect
MySQL with InnoDB org.hibernate.dialect.MySQLInnoDBDialect
MySQL with MyISAM org.hibernate.dialect.MySQLMyISAMDialect
Oracle (any version) org.hibernate.dialect.OracleDialect
Oracle 9i org.hibernate.dialect.Oracle9iDialect
Oracle 10g org.hibernate.dialect.Oracle10gDialect
Sybase org.hibernate.dialect.SybaseDialect
Sybase Anywhere org.hibernate.dialect.SybaseAnywhereDialect
Microsoft SQL Server org.hibernate.dialect.SQLServerDialect
SAP DB org.hibernate.dialect.SAPDBDialect
Informix org.hibernate.dialect.InformixDialect
HypersonicSQL org.hibernate.dialect.HSQLDialect
Ingres org.hibernate.dialect.IngresDialect
Progress org.hibernate.dialect.ProgressDialect
Mckoi SQL org.hibernate.dialect.MckoiDialect
Interbase org.hibernate.dialect.InterbaseDialect
Pointbase org.hibernate.dialect.PointbaseDialect
FrontBase org.hibernate.dialect.FrontbaseDialect
Firebird org.hibernate.dialect.FirebirdDialect
这就是为什么...
如果您使用 hibernate 配置设置数据库连接,则不需要 dialect 属性,因为 hibernate 会为您完成:
hibernate.connection.driver
hibernate.connection.url
user configs and etc...
但是,如果你用常规数据源代码建立连接并使用hibernate你需要指定hibernate.dialect
属性,因为那样连接将不知道hibernate是什么方言。
dataSource.setdriverClassName
datasource.setUrl...
password configs and etc...