【发布时间】:2014-01-30 15:06:55
【问题描述】:
是否可以根据使用的数据库使用 JPA 定义不同的列类型?
我需要将 id 存储为 uuid,并且它必须是可移动的。那就是问题所在。 PostgreSQL 有 'uuid',MSSQL 'uniqueidentifier' 而 Oracle 什么都没有,我认为必须使用 'RAW'。
有什么想法可以帮助我吗?
编辑: 目前,id 是使用 java.util.UUID 生成的,并作为 varchar 存储在数据库中。但是由于该数据类型的性能问题,我想将 id 存储为 uuid 类型。 对于 Oracle,必须使用 RAW 类型,因为不存在 uuid 类型。如何告诉 JPA 在 PostgreSQ/MSSQL 中使用 uuid 类型,在 Oracle 中使用 RAW 类型?
【问题讨论】:
-
varchar 如何产生性能问题?这是我第一次听说。我不认为性能问题来自 varchar,但可能来自缺少索引和/或键。
-
我不认为 varchars 是性能问题的原因。但是使用 uuid 类型可以提高 10% 到 30% 的性能。现在我的任务是找出如何在所有支持的数据库中使用 uuid 类型
-
执行类似的操作需要将元数据与类分离,因此根据数据存储区的不同,可以将 1 个类与不同的元数据一起使用(而您不能使用注释来做到这一点)。 JPA 不够灵活,无法提供这种功能(即使使用其 XML 元数据);您可能会获得一些特定于供应商的选项,但随后会失去供应商的可移植性。唯一允许所有这些的持久性标准是 JDO。