Java Hibernate с SQL Server 2012 не работает?
15374 просмотра
2 ответа
У меня есть конфигурация проекта Java Hibernate, которая работала с SQL Server 2008 R2, теперь с новой ОС 8.1 (из 7) и SQL Server 2012 (экспресс) я не могу подключиться к серверу SQL.
Соответствующая конфигурация, которая является / должна быть синтаксически правильной, поскольку она работала с 2008 R2:
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 нет проблем с подключением (с именем экземпляра или без него).
Я обновил SQL Server Network Configuration
для SQLEXPRESS
.
Протоколы для SQLEXPRESS:
TCP/IP Enabled
Как и все TCP/IP Properties - TCP Port
до 1433 года.
Я попытался отключить брандмауэр Windows, чтобы проверить, не мешает ли он, но приводит к той же ошибке.
Я закончил тем, что добавил правила брандмауэра и выполнил некоторые из шагов в этой отличной настройке SQL Express 2012 для принятия статьи об удаленных подключениях .
Сообщение об ошибке:
Caused by: java.lang.AbstractMethodError
at net.sourceforge.jtds.jdbc.JtdsConnection.isValid(JtdsConnection.java:2833)
Автор: lko
Источник
Размещён: 13.11.2019 11:34
Ответы (2)
23 плюса
Ваша проблема в том, что 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"
в свой <Resource>
тег Tomcat пул соединений, который обычно находится в 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");
Автор: acdcjunior
Размещён: 08.01.2015 06:43
0 плюса
Похоже, что у jTDS есть некоторые проблемы с SQL Server 2012 (обновление 2?) Или что-то изменилось, в 2012/8.1
чем ранее работал 2008 R2/7
.
Используя почти ту же конфигурацию, что и выше, с несколькими небольшими изменениями , я загрузил и изменил datasource.properties, чтобы использовать Microsoft JDBC Driver 4.0 для SQL Server .
jdbc.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc.url=jdbc:sqlserver://localhost:1433;
#jdbc.url=jdbc:sqlserver://localhost\dbname:1433;
Я просто поставил sqljdbc4.jar
в систему, tomcat\lib\
чтобы убедиться , что драйвер MS JDBC 4.0 работает с SQL Server 2012 со всеми обновлениями и она прекрасно работает. Диалект org.hibernate.dialect.SQLServerDialect
работал и в 2012 году.
Вопросы из категории :
- java В чем разница между int и Integer в Java и C #?
- java Как я могу определить IP моего маршрутизатора / шлюза в Java?
- java Каков наилучший способ проверки XML-файла по сравнению с XSD-файлом?
- java Как округлить результат целочисленного деления?
- sql-server Проверить наличие изменений в таблице SQL Server?
- sql-server Как разбить строку, чтобы я мог получить доступ к элементу x?
- sql-server Клиент SQL для Mac OS X, который работает с MS SQL Server
- sql-server Удалить все таблицы, имена которых начинаются с определенной строки
- hibernate Как вы «ИЛИ» критерии вместе при использовании запроса критериев с Hibernate?
- hibernate пакет вставки спящего режима с разделенным postgresql
- hibernate Как избежать предупреждений о безопасности типа с результатами Hibernate HQL?
- hibernate Каковы различия между различными методами сохранения в Hibernate?
- sql-server-2012 Как проверить, существует ли столбец в таблице SQL Server?
- sql-server-2012 Настройка «Значение по умолчанию или привязка» Entity Framework Code First
- sql-server-2012 Диспетчер конфигурации SQL Server не найден
- sql-server-2012 Последовательность против идентичности
- jtds Как я могу выполнить хранимую процедуру с помощью JDBC / jTDS без использования транзакции?
- jtds JDBC Jtds не может установить соединение
- jtds Как передать табличные параметры (массив-подобный параметр) в хранимую процедуру в Microsoft SQL Server 2008 R2 с использованием JDBC?
- jtds Не удается подключиться к SQL Server через драйвер JDBC для Microsoft SQL Server 2012