【问题标题】:how to configure hibernate config file for sql server如何为 sql server 配置休眠配置文件
【发布时间】:2011-04-04 20:58:02
【问题描述】:

这是 MySQL 的配置文件:

<hibernate-configuration>
  <session-factory>
    <property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost/test</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">zgy01</property>
    <property name="hibernate.connection.pool_size">100</property>
    <property name="show_sql">false</property>
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

    <!-- Mapping files -->
    <mapping resource="model.hbm.xml"/>

  </session-factory>
</hibernate-configuration>

为 SQL Server 2005 指定什么?我是这样做的:

<hibernate-configuration>
  <session-factory>
    <property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
    <property name="hibernate.connection.url">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
    <property name="hibernate.connection.username">sa</property>
    <property name="hibernate.connection.password">lal</property>
    <property name="dialect">org.hibernate.dialect.SQLServerDialect</property>

    <property name="hibernate.connection.pool_size">100</property>        
    <property name="show_sql">false</property>

    <!-- Mapping files -->
    <mapping resource="model.hbm.xml"/>

  </session-factory>
</hibernate-configuration>

我的问题更确切地说是如何指定我必须连接到的数据库?

在 MySQL 中我曾经这样做过:

<property name="hibernate.connection.url">jdbc:mysql://localhost/test</property> 

【问题讨论】:

  • SQL Server hibernate.connection.driver_class 似乎有复制/粘贴错误? hibernate.connection.url 中的值应该在 driver_class 属性中,并且 URL 应该是 SQL Server 数据库的自定义 URL

标签: java sql-server hibernate orm hibernate.cfg.xml


【解决方案1】:

数据库特定的属性是:

  • hibernate.connection.driver_class: JDBC 驱动类
  • hibernate.connection.url: JDBC URL
  • hibernate.connection.username:数据库用户
  • hibernate.connection.password:数据库密码
  • hibernate.dialect:Hibernate org.hibernate.dialect.Dialect 的类名,它允许 Hibernate 生成针对特定关系数据库优化的 SQL。

要更改数据库,您必须:

  1. 为类路径上的数据库提供适当的 JDBC 驱动程序,
  2. 更改 JDBC 属性(驱动程序、url、用户、密码
  3. 更改 Hibernate 用于与数据库通信的 Dialect

有两个驱动程序可以连接到 SQL Server;开源的jTDS 和微软的。驱动程序类和 JDBC URL 取决于您使用哪一个。

使用 jTDS 驱动程序

驱动类名是net.sourceforge.jtds.jdbc.Driver

sqlserver 的 URL 格式为:

 jdbc:jtds:sqlserver://<server>[:<port>][/<database>][;<property>=<value>[;...]]

所以 Hibernate 配置看起来像(请注意,您可以跳过属性中的 hibernate. 前缀):

<hibernate-configuration>
  <session-factory>
    <property name="connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property>
    <property name="connection.url">jdbc:jtds:sqlserver://<server>[:<port>][/<database>]</property>
    <property name="connection.username">sa</property>
    <property name="connection.password">lal</property>

    <property name="dialect">org.hibernate.dialect.SQLServerDialect</property>

    ...
  </session-factory>
</hibernate-configuration>

使用 Microsoft SQL Server JDBC 3.0:

驱动类名是com.microsoft.sqlserver.jdbc.SQLServerDriver

网址格式为:

jdbc:sqlserver://[serverName[\instanceName][:portNumber]][;property=value[;property=value]]

所以 Hibernate 配置如下所示:

<hibernate-configuration>
  <session-factory>
    <property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
    <property name="connection.url">jdbc:sqlserver://[serverName[\instanceName][:portNumber]];databaseName=<databaseName></property>
    <property name="connection.username">sa</property>
    <property name="connection.password">lal</property>

    <property name="dialect">org.hibernate.dialect.SQLServerDialect</property>

    ...
  </session-factory>
</hibernate-configuration>

参考文献

【讨论】:

  • 谢谢你,非常具体和精彩。
  • 我遇到了 2012 和 jTDS 的问题,但让 JDBC 4.0 工作。 stackoverflow.com/questions/26404283/…
  • 就我而言,我必须确保我为我的 Microsoft SQL Server 使用了正确的方言。我使用org.hibernate.dialect.SQLServer2012Dialect 而不是默认的org.hibernate.dialect.SQLServerDialect 似乎是Microsoft SQL Server 2000。对于 2005 年的 persistence.xml 我会做&lt;property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2005Dialect"/&gt;
【解决方案2】:

SQL Server 的连接 URL 应如下所示:

jdbc:sqlserver://serverName[\instanceName][:port][;databaseName=your_db_name]

例子:

jdbc:sqlserver://localhost
jdbc:sqlserver://127.0.0.1\INGESQL:1433;databaseName=datatest
...

【讨论】:

    【解决方案3】:

    我们还需要提及 SQSERVER 的默认架构:dbo

    <property name="hibernate.default_schema">dbo</property>
    

    使用休眠 4 测试

    【讨论】:

      【解决方案4】:

      不要忘记在 SQL SERVER 配置工具中启用 tcp/ip 连接

      【讨论】:

        【解决方案5】:

        最后这是Tomcat中的Hibernate 5

        编译了上面的所有答案并添加了我的提示,这对Hibernate 5 and SQL Server 2014 来说就像一个魅力。

        <hibernate-configuration>
        <session-factory>
        <property name="hibernate.dialect">
           org.hibernate.dialect.SQLServerDialect
        </property>
        <property name="hibernate.connection.driver_class">
           com.microsoft.sqlserver.jdbc.SQLServerDriver
        </property>
        <property name="hibernate.connection.url">  
        jdbc:sqlserver://localhost\ServerInstanceOrServerName:1433;databaseName=DATABASE_NAME 
        </property>
        <property name="hibernate.default_schema">theSchemaNameUsuallydbo</property>
        <property name="hibernate.connection.username">
           YourUsername
        </property>
        <property name="hibernate.connection.password">
           YourPasswordForMSSQL
        </property>
        

        【讨论】:

          【解决方案6】:

          将 jar 文件保存在 web-inf lib 下,以防您包含 jar 并且无法识别。

          在我的情况下一切正常但无法加载驱动程序类。

          【讨论】:

          • 点评来源: 这篇文章似乎没有为问题提供quality answer。请编辑您的答案并改进它,或者将其作为对该问题的评论发布。
          猜你喜欢
          • 2013-04-26
          • 2012-10-24
          • 2017-04-30
          • 1970-01-01
          • 1970-01-01
          • 2015-02-28
          • 2017-05-20
          • 2010-11-08
          • 2011-01-23
          相关资源
          最近更新 更多