jpa mssql @Lob и создайте 2ГБ столбцы с мобильностью

1

Я хотел бы создать поле BLOB в таблицах приложений usign JPA. Я должен поддерживать несколько баз данных (Derby, Microsoft SQL Server). Когда я определяю поля @Lob как:

@Lob
private byte[] fileData;

JPA создает размер BLOB по умолчанию для каждой РСУБД. В MSSQL у меня есть FILEDATA BLOB с размером по умолчанию 8000 байт. Этого недостаточно. Когда я определяю определение как:

@Lob
@Column(columnDefinition = "varbinary(max)")
private byte[] fileData;

Я потерял переносимость. JPA не может создать varbinary column типа VARBINARY в DB Derby. Когда я использую следующее определение:

@Lob
@Column(length = 2147483647)
private byte[] fileData;

Проблема отчета MSSQL с созданием таблицы, поскольку "Размер (2147483647), присвоенный столбцу" FILEDATA ", превышает максимально допустимый для любого типа данных (8000)".

Какое наилучшее решение для создания полей BLOB с учетом переносимости и предоставления определенного размера BLOB?

Теги:
sql-server
jpa

1 ответ

0
Лучший ответ

Один из вариантов может заключаться в том, чтобы вообще не использовать определения столбцов. Два подхода:

  1. Поддерживайте различные сценарии создания SQL - по одному для каждого типа целевой базы данных.
  2. Используйте инструмент разработки базы данных, такой как http://liquibase.org, который будет поддерживать вашу схему базы данных и, как известно, независимую базу данных, насколько это возможно.

Я очень счастливый пользователь Liquibase. Это экономит много времени и уменьшает боль в SQL после его настройки. Но один недостаток: поскольку в настоящий момент интеграция JPA-Liquibase отсутствует, вы должны вручную синхронизировать классы объектов и набор изменений Liquibase вручную.

Существуют и другие подобные инструменты (например, http://flywaydb.org/), но я не знаю, насколько они независимы от базы данных.

  • 0
    Спасибо, я уже использую liquibase, но хотел пропустить разделение определения схемы jpa и liquibase и синхронизировать его вручную. Я вижу, что единственным вариантом в этой ситуации является: a) отключить автоматическое создание jpa, b) создать сценарии создания схемы liquibase с нуля и синхронизировать его во время изменений схемы базы данных.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню