java - 使用 JPA 的不同数据库的不同列类型

标签 java database oracle jpa

是否可以根据使用的数据库使用 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 类型?

最佳答案

您可以使用 java.util.UUID 生成您的 uuid 并将其存储到字符可变 (60) 列类型中。 现在既然你想成为一个主键,那么自动生成它应该很好。因此,您可以在 PrePersist 上为您的类(class)添加一个实体监听器:

@EntityListeners({ AbstractEntity.AbstractEntityListener.class})
public class Entity {

    public static class AbstractEntityListener {
        @PrePersist
        public void onPrePersist(Entity entity) {
            entity.uid();
        }
    }

    private String uid() {
        if (uid == null)
          uid = UUID.randomUUID().toString();
        return uid;
    }
}

请注意,我没有对此进行测试。所以它可能不会 100% 有效。

关于java - 使用 JPA 的不同数据库的不同列类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21460074/

相关文章:

java - 玩!框架 2.1 - 调度异步任务 (Java)

MySQL多重PK

java - 无法解析方法 'super(?,java.lang.String, com.android.volley.Response.Listener<java.lang.String>,null)'

java - 从数据库检索数据的想法 struts 2 web 应用程序

sql - 将xml转换为表

java - 无法使用 Maven 解决 Artifact 错误

java - 尝试在 Java 列表上进行 stream().filter().collect(Collectors.toList())) 时获取 NullPointerException

sql - 将行对与交换的列组合起来

Eclipse Mars 中的 Java 程序立即终止且没有输出?

sql - 在 Oracle 11g 查询中使用多列、多行表文字是否有一种非丑陋的方法?