Проверка схемы Hibernate | MS SQL varchar (max) | MS SQL 2008 - PullRequest
0 голосов
/ 07 ноября 2018

Проблемы с 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)

Так почему существуют разные "фонды"? От кого эта информация «найдена» в спящем режиме?

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Благодаря пользователю "UnhandledExcepSean" решение:

<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2008Dialect" />

и

@Column(name = "FehlerLevel", nullable = false, columnDefinition = "text")
public String getFehlerLevel() {
0 голосов
/ 08 ноября 2018

Исправляет ли добавление columnDefinition = "TEXT" в дескриптор @Column? Мне кажется, что тип базы данных - TEXT, а Hibernate по умолчанию имеет длину 255 строк. Похоже, что столбцы базы данных не идентичны на вашем локальном компьютере и на тестовом сервере.

https://docs.jboss.org/hibernate/jpa/2.1/api/javax/persistence/Column.html

...