Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Java Hibernate с SQL Server 2012 не работи?

Вашият проблем е, че jTDS не поддържа начина, по който DBCP2 валидира връзка по подразбиране (предполагам, че използвате DBCP2 от <bean id="dataSource" 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 и проектът работи добре (и също се свърза с SQLServer 2012) под Tomcat7. Когато преминах към Tomcat 8, тази грешка се появи.

Причината, както намеква във форумите на jTDS , е:

  • (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> таг за набор от връзки, който обикновено е в META-INF/context.xml на вашето приложение или conf/server.xml :

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

Напролет

Когато използвате DBCP2 до Spring, решението е нещо около:

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

На прост код на Java

dataSource.setValidationQuery("select 1"); 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sql:МЕЖДУ v1 И v2

  2. Прекъсването на SQL ред не работи

  3. Създайте изглед с помощта на Linked Server db в SQL Server

  4. SQL Server XQuery връща грешка

  5. Как да изпълня съхранена процедура веднъж за всеки ред, върнат от заявка?