【问题标题】:Not specifying Hibernate dialect未指定 Hibernate 方言
【发布时间】:2013-05-03 22:22:36
【问题描述】:

我是 Hibernate 的新手。在阅读 Hibernate 时,我遇到了 Dialect 属性。无论我们将在应用程序中使用什么数据库,我们都需要设置与该数据库相关的方言,Hibernate 将生成与该数据库相关的适当查询。

只是想知道它是否是必须设置的属性?如果在 hibernate.cfg.xml 文件中没有指定,那么 Hibernate 将如何生成 SQL 查询,即生成哪个数据库兼容的 SQL 查询?

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    不,根据文档,这不是强制性的 http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/session-configuration.html#configuration-optional-dialects ,我没有尝试过相同的。虽然您对其他观点的回答我也想从这里的一些经验丰富的人那里得到答案。 :)

    【讨论】:

    • 那么默认的方言是什么? hibernate 可以使用 connection.driver_class 属性检测使用的数据库吗?
    • 这个问题请参考Martin Andersson的回答:stackoverflow.com/questions/21012799/…
    【解决方案2】:

    我认为这不是强制性的,但最好将其设置为 hibernate.cfg.xml

    <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
    

    【讨论】:

      【解决方案3】:

      这就是为什么...

      如果您使用 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...
      

      【讨论】:

        猜你喜欢
        • 2011-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-27
        • 2016-06-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多