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