gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:48:27 25 4
gpt4 key购买 nike

我想使用 JPA 在应用程序表中创建 BLOB 字段。我必须支持多个数据库(Derby、Microsoft SQL Server)。当我将 @Lob 字段定义为:

@Lob
private byte[] fileData;

JPA 为每个 RDBMS 创建默认大小的 BLOB 字段。在 MSSQL 中,我有默认大小为 8000 字节的 FILEDATA BLOB。这还不够。当我将定义定义为:

@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. 维护不同的 SQL 创建脚本 - 每个目标数据库类型一个。
  2. 使用数据库进化工具,例如 http://liquibase.org它将维护您的数据库模式,并且已知尽可能独立于数据库。

我是一个非常快乐的 Liquibase 用户。一旦设置好,它可以节省大量时间并减少 SQL 的痛苦。但有一个缺点:由于目前没有 JPA-Liquibase 集成,您必须手动保持实体类和 liquibase 变更集同步。

还有其他这样的工具(例如 http://flywaydb.org/ ),但我不知道它们是如何独立于数据库的。

关于java - jpa mssql @Lob 并创建具有可移植性的 2GB 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23948707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com