Java Hibernate与SQL Server 2012无法正常工作?

栏目: Hibernate · 发布时间: 6年前

内容简介:翻译自:https://stackoverflow.com/questions/26404283/java-hibernate-with-sql-server-2012-not-working
我有一个 Java

Hibernate项目配置,它与SQL Server 2008 R2配合使用,现在有了新的OS 8.1(从7开始)和SQL Server 2012(快速),我无法连接到 SQL 服务器.

自2008 R2起作用后,相关配置为 syntactically correct

datasource.properties

jdbc.driverClassName=net.sourceforge.jtds.jdbc.Driver
jdbc.url=jdbc:jtds:sqlserver://localhost:1433/dbname;instance=SQLEXPRESS
jdbc.username=auser
jdbc.password=xyz

我尝试了两种方言org.hibernate.dialect.SQLServerDialect在2008 R2中工作.

hibernate.hbm2ddl.auto=create-drop
hibernate.dialect=org.hibernate.dialect.SQLServerDialect
#hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect
hibernate.show_sql=true

springConfiguration.xml

<bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp2.BasicDataSource"> 
    <property name="driverClassName" value="${jdbc.driverClassName}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
</bean>

SQL Server 2012安装了混合模式身份验证,SQL Server Management Studio连接没有问题(有或没有实例名称).

我已经更新了SQLEXPRESS的SQL Server网络配置.

SQLEXPRESS的协议:

TCP / IP已启用

以及所有TCP / IP属性 – TCP端口到1433.

我试过禁用Windows防火墙只是为了测试它是否在路上,但它会导致相同的错误.

我最终添加了防火墙规则并遵循了这个优秀的 configure SQL Express 2012 to accept remote connections article 中的一些步骤.

错误消息:

Caused by: java.lang.AbstractMethodError
at net.sourceforge.jtds.jdbc.JtdsConnection.isValid(JtdsConnection.java:2833)
您的问题是jTDS不支持默认情况下DBCP2验证连接的方式(我假设您使用来自<

bean id =“dataSource”的DBCP2“class =”org.apache.tomcat.dbcp.dbcp2.BasicDataSource“>) .请参阅下面的解决方案

通常错误堆栈跟踪如下所示:

Caused by: java.lang.AbstractMethodError
    at net.sourceforge.jtds.jdbc.JtdsConnection.isValid(JtdsConnection.java:2833)
    at org.apache.tomcat.dbcp.dbcp2.DelegatingConnection.isValid(DelegatingConnection.java:913)

但是,问题与SQL Server版本无关,而与使用的DBCP(Tomcat)版本(或项目部署到的Tomcat服务器版本)无关.

一旦我使用jTDS 1.3.1并且该项目在Tomcat7下工作正常(并且连接到SQLServer 2012).当我改为Tomcat 8时,出现了这个错误.

原因是, hinted in jTDS forums 是:

>(Tomcat7使用DBCP 1,Tomcat 8使用DBCP 2)

>与DBCP 1.x不同,DBCP 2将调用java.sql.Connection.isValid(int)来验证连接

> jTDS没有实现.isValid(),因此jTDS驱动程序不能与DBCP 2一起使用,除非……

> …除非你设置validationQuery参数,这将使DBCP不能调用.isValid()来测试连接的有效性.

解决方法

因此,解决方法是设置validationQuery参数,这将使DBCP2不调用.isValid()来测试连接的有效性.这是如何做:

在Tomcat上

将validationQuery =“select 1”添加到您的Tomcat<Resource>连接池的标记,通常位于应用程序或conf / server.xml的META-INF / context.xml中:

<Resource ... validationQuery="select 1" />

在春天

通过Spring使用DBCP2时,解决方案就是:

<bean id="..." ...> 
    ...
    <property name="validationQuery" value="select 1" />
</bean>

简单的 java 代码

dataSource.setValidationQuery("select 1");

翻译自:https://stackoverflow.com/questions/26404283/java-hibernate-with-sql-server-2012-not-working


以上所述就是小编给大家介绍的《Java Hibernate与SQL Server 2012无法正常工作?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

机器消灭秘密

机器消灭秘密

安迪•格林伯格 (Andy Greenberg) / 王崧、王涛、唐禾 / 重庆出版社 / 2017-8-10 / 49.8

《机器消灭秘密》一书中,格林伯格深入研究并生动再现了那些拥有全能技术的网络安全魔术师,他们将任何企图染指个人隐私的所谓国家机密的保密性打得粉碎。这本精心组织的著作是对此题材感兴趣的读者的必读之书,即便现在你可能不感兴趣,将来也极有可能希望了解这些内容,因为任何人都会不可避免地置身其中。无论你是初涉电脑屏幕之后的虚拟战场的新生,还是经验丰富的维基解密观察家,本书都是不可多得的上乘之作,你总会在其中发......一起来看看 《机器消灭秘密》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器