jpa mssql @Lob并创建具有可移植性的2GB列

时间:2014-05-30 06:51:04

标签: java sql-server jpa

我想在应用程序表中使用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大小的最佳解决方案是什么?

1 个答案:

答案 0 :(得分:0)

一个选项可能根本不使用列定义。两种方法:

  1. 维护不同的SQL创建脚本 - 每个目标数据库类型一个。
  2. 使用数据库演变工具,例如http://liquibase.org,它将维护您的数据库架构,并且尽可能与数据库无关。
  3. 我是一个非常高兴的Liquibase用户。它可以节省大量时间,并在设置后减少SQL痛苦。但有一个缺点:由于目前没有JPA-Liquibase集成,你必须手动保持实体类和liquibase变更集同步。

    还有其他此类工具(例如http://flywaydb.org/),但我不知道它们与数据库无关。