具有JPA的不同数据库的不同列类型

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

您可以使用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%工作。

我会使用SequenceGenerator 。 查看此答案以获取更多详细信息 你将不得不做一个seq。 每个实体生成器,以确保您不会遇到并发问题。 还要确保设置好/不存在的初始值。