JPA针对不同数据库的不同列类型

Jul*_*anG 5 java database oracle jpa

是否可以根据使用的数据库使用 JPA 定义不同的列类型?

我需要将 id 存储为 uuid 并且它必须是可移植的。那就是问题所在。PostgreSQL有“uuid”,MSSQL有“uniqueidentifier”,而Oracle什么都没有,我想必须使用“RAW”。

有人有想法并且可以帮助我吗?

编辑:目前,id 是使用 java.util.UUID 生成的,并以 varchar 形式存储在数据库中。但由于该数据类型的性能问题,我想将 ids 存储为 uuid 类型。对于Oracle来说,必须使用RAW类型,因为不存在uuid类型。如何告诉 JPA 在 PostgreSQ/MSSQL 中使用 uuid 类型,在 Oracle 中使用 RAW 类型?

BBo*_*dan 0

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

@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;
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,我没有对此进行测试。所以它可能无法100%工作。