我想在应用程序表中使用JPA创建BLOB字段。我必须支持多个数据库(Derby,Microsoft SQL Server)。当我将@Lob字段定义为:
时@Lob
private byte[] fileData;
JPA为每个RDBMS创建BLOB字段的默认大小。在MSSQL中,我有FILEDATA BLOB,默认大小为8000字节。这还不够。当我将定义定义为:
@Lob
@Column(columnDefinition = "varbinary(max)")
private byte[] fileData;
我失去了便携性。 JPA无法在Derby DB中创建VARBINARY类型的varbinary列。当我使用以下定义时:
@Lob
@Column(length = 2147483647)
private byte[] fileData;
MSSQL报告表创建的问题,因为“给'FILEDATA'列的大小(2147483647)超过了任何数据类型允许的最大值(8000)。”
创建具有可移植性的BLOB字段并提供特定BLOB大小的最佳解决方案是什么?
答案 0 :(得分:0)
一个选项可能根本不使用列定义。两种方法:
我是一个非常高兴的Liquibase用户。它可以节省大量时间,并在设置后减少SQL痛苦。但有一个缺点:由于目前没有JPA-Liquibase集成,你必须手动保持实体类和liquibase变更集同步。
还有其他此类工具(例如http://flywaydb.org/),但我不知道它们与数据库无关。