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

时间:2014-01-30 15:06:55

标签: java database oracle 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类型?

2 个答案:

答案 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。每个实体生成器,以确保您不会遇到并发问题。 还要确保设置好/不存在的初始值。