根据使用的数据库,是否可以使用JPA定义不同的列类型?
我需要将id存储为uuid,并且它必须是可保存的。那就是问题所在。 PostgreSQL有'uuid',MSSQL'uniqueidentifier'而且Oracle什么都没有,我认为必须使用'RAW'。
有人有想法可以帮助我吗?
编辑:目前使用java.util.UUID生成ID并将其作为varchar存储在数据库中。但由于该数据类型的性能问题,我想将id存储为uuid类型。 对于Oracle必须使用RAW类型,因为不存在uuid类型。如何告诉JPA在Oracle中使用带PostgreSQ / MSSQL和RAW类型的uuid类型?
答案 0 :(得分:0)
您可以使用java.util.UUID生成uuids并将其存储到字符变化(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;
}
}
请注意,我没有测试过这个。所以它可能无法100%工作。
答案 1 :(得分:0)
我会使用SequenceGenerator
。查看this answer了解更多详情。你将不得不做一个seq。每个实体生成器,以确保您不会遇到并发问题。
还要确保设置好/不存在的初始值。