如何配置Hibernate配置文件以连接SQL Server数据库

46

这是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。 - rynmrtn
6个回答

102

与数据库有关的属性包括:

  • 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属性(driver、url、user、password
  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

URL 格式为:

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>

参考资料


1
谢谢,非常具体和精彩。 - Jalal Sordo
我在使用2012和jTDS时遇到了问题,但是成功地使用了JDBC 4.0。https://dev59.com/OYTba4cB1Zd3GeqP4VT5 - lko
在我的情况下,我必须确保我正在为我的 Microsoft SQL Server 使用正确的方言。我使用 org.hibernate.dialect.SQLServer2012Dialect 而不是默认的 org.hibernate.dialect.SQLServerDialect,后者似乎是针对 Microsoft SQL Server 2000 的。对于 2005,在 persistence.xml 中,我会这样做 <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2005Dialect"/> - Maxence

8
连接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
...

6
我们还需要提到SQSERVER的默认模式:dbo。
<property name="hibernate.default_schema">dbo</property>

已使用Hibernate 4进行测试


4

不要忘记在SQL SERVER配置工具中启用TCP/IP连接。


3

最后,这是针对在Tomcat中使用Hibernate 5的内容。

总结以上答案并加上我的技巧,可以完美地适用于Hibernate 5和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>

-1

将jar文件放在web-inf lib下,以防您包含了jar文件但无法识别。

在我的情况下,这起作用了,因为一切都很好,但是它无法加载驱动程序类。


来自评论:这篇文章似乎没有提供一个高质量的答案给问题。请编辑您的答案并改进它,或者将其作为评论发布到问题中。 - sɐunıɔןɐqɐp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接