如何为 sql server 配置休眠配置文件

Posted

技术标签:

【中文标题】如何为 sql server 配置休眠配置文件【英文标题】:how to configure hibernate config file for 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 【参考方案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。

要更改数据库,您必须:

    为类路径上的数据库提供适当的 JDBC 驱动程序, 更改 JDBC 属性(驱动程序、url、用户、密码) 更改 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>

参考文献

Hibernate 核心参考文档 3.3. JDBC connections 3.4. Optional configuration properties jTDS Documentation Microsoft SQL Server JDBC Driver 3.0 Documentation Microsoft SQL Server JDBC Driver 2.0 Support Matrix for Microsoft SQL Server JDBC Driver

【讨论】:

谢谢你,非常具体和精彩。 我遇到了 2012 和 jTDS 的问题,但让 JDBC 4.0 工作。 ***.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。请编辑您的答案并改进它,或者将其作为对该问题的评论发布。

以上是关于如何为 sql server 配置休眠配置文件的主要内容,如果未能解决你的问题,请参考以下文章

如何为 SQL Server Windows 身份验证配置 Squirrel SQL

如何为 SQL Server 访问配置 ngrok

如何为 SQL Server(Windows 身份验证)配置 Spring XML?

如何为SQL Server2008添加登录账户并配置权限

如何为SQL Server2008添加登录账户并配置权限

如何为密钥持有者配置文件配置 Spring Security SAML 扩展