Я хотел бы создать поле 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?
Один из вариантов может заключаться в том, чтобы вообще не использовать определения столбцов. Два подхода:
Я очень счастливый пользователь Liquibase. Это экономит много времени и уменьшает боль в SQL после его настройки. Но один недостаток: поскольку в настоящий момент интеграция JPA-Liquibase отсутствует, вы должны вручную синхронизировать классы объектов и набор изменений Liquibase вручную.
Существуют и другие подобные инструменты (например, http://flywaydb.org/), но я не знаю, насколько они независимы от базы данных.