一尘不染

使用UUID作为数据库主键,Java类型是一个字节[]

sql

在JPA实体中使用byte []作为主键是否存在任何问题?

我想使用UUID作为主键,但存储为字符串,我觉得它会太大。

我正在考虑做这样的事情来将ID存储为byte []并将其设置为我的实体ID:

    public static byte[] byteArray(UUID uuid) {
        long lsb = uuid.getLeastSignificantBits();
        long msb = uuid.getMostSignificantBits();

        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        DataOutputStream dos = new DataOutputStream(bos);
        try {
            dos.writeLong(lsb);
            dos.writeLong(msb);
            dos.flush();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        byte[] data = bos.toByteArray();
//      System.out.println("Byte Array Length "+data.length);
        return data;

    }

在数据库中为此设置索引会遇到麻烦吗?我同时使用Postgres和HSQL。我正在使用Hibernate作为我的JPA提供程序。


阅读 160

收藏
2021-03-08

共1个答案

一尘不染

请记住,使用SQL客户端的用户在查询byte [] id时会遇到麻烦。这就是为什么db id通常是数字的原因。手写查询要容易得多。

2021-03-08