Проблемы с JPA / Hibernate и существующей базой данных MS-SQL 2008, в которой есть таблица со столбцом, определенным как "varchar (max)".
MS Документы о varchar (n | max) и дополнительная нить стека - см. Ответ
Определение столбца скопировано с MS SQL 2008 Server:
Скриншот
Сущность, сгенерированная hbm2java:
@Entity
@Table(name = "Log")
public class Log implements java.io.Serializable {
private String fehlerLevel;
@Column(name = "FehlerLevel", nullable = false)
public String getFehlerLevel() {
Использованные библиотеки:
кот 8,5
Спящий режим 5.2.17. Финал
hibernate.validator 6.0.9.Final
hibernate.validator.cdi 6.0.9. Финал
hibernate.jpa.2.1.api 1.0.2.Final
Дело 1:
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2008Dialect" />
Локальная машина разработчика = ОК
Testserver (catalina loghost ... log) =
Проверка схемы: обнаружен неправильный тип столбца в столбце [FehlerLevel] в таблице [Журнал]; найдено [text (Types # LONGVARCHAR)], но ожидается [varchar (255) (Types # VARCHAR)]
Случай 2:
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" />
Локальная машина разработчика = ОК
Testserver (catalina loghost ... log) =
Проверка схемы: в столбце обнаружен неправильный тип столбца
[FehlerLevel] в таблице [Log]; найдено [текст (Типы # LONGVARCHAR)], но
ожидая [varchar (255) (Типы # VARCHAR)]
Дело 3:
Измененная сущность, добавлено @ Lob
@Lob
@Column(name = "FehlerLevel", nullable = false)
public String getFehlerLevel() {
Начните с (как в случае 2):
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" />
Локальный компьютер разработчика (вывод на консоль) =
Проверка схемы: в столбце обнаружен неправильный тип столбца
[FehlerLevel] в таблице [Log]; найдено [varchar (Types # VARCHAR)], но
ожидая [текст (Типы # CLOB)]
Testserver = OK
__________ Теперь он работает на тестовом сервере, но не на моей локальной машине.
Дело 4:
Сущность с @Lob и с диалектом 2008 (как в случае 1) ::
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2008Dialect" />
Локальная машина разработчика = OK
Testserver (catalina loghost ... log) =
Проверка схемы: в столбце обнаружен неправильный тип столбца
[FehlerLevel] в таблице [Log]; найдено [текст (Типы # LONGVARCHAR)], но
ожидая [varchar (max) (Types # CLOB)]
__________ Теперь он снова запускается на моей локальной машине и снова не на тестовом сервере
Что здесь происходит?
Каково решение моей проблемы?
Все библиотеки будут упакованы в war-файл и доступны на сервере в папке app \ WEB-INF \ lib. Наши администраторы tomcat сказали мне, что у них нет ограничений, поэтому приложение может использовать свои собственные библиотеки. Это означает, что не должно быть никакой разницы между моей локальной машиной и сервером. Мы проверили, что оба используют одну и ту же базу данных.
И ... может кто-нибудь объяснить, что делается / включается в проверку схемы? Какие библиотеки (hibernate, db-драйвер и т. Д.) Затронуты?
Разница в сообщениях при сбое проверки:
найдено [varchar (Types # VARCHAR)] --- локальный компьютер - (случай 3)
найдено [текст (Типы # LONGVARCHAR)] --- тестовый сервер - (случай 1, 2, 4)
Так почему существуют разные "фонды"? От кого эта информация «найдена» в спящем режиме?