具有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。 每个实体生成器,以确保您不会遇到并发问题。 还要确保设置好/不存在的初始值。
- 无法使用可执行文件C:\ Program Files \ Java \ jdk-10.0.1 \ bin \ java.exe确定Java版本
- Shadow Plugin Gradle:mergeServiceFiles()有什么作用?
- java cpu使用情况监控
- ActionError未显示
- spring mvc date format with form:input
- 如何在Spring restful服务中处理由文件和JSON对象组成的多部分请求?
- 没有基础表的JPA实体
- 将java 8 lambda表达式转换为在java 7中工作
- 如何在Hadoop MapReduce中将Object设置为Map输出的值?