当前位置: 首页 > 面试题库 >

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

双浩涆
2023-03-14
问题内容

在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提供程序。


问题答案:

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



 类似资料:
  • 问题内容: 如果我使用ID nr:s代替VARCHARS作为外键会更好吗?最好使用VARCHARS的ID nr:s istead作为主键吗?ID nr是指INT! 这就是我现在所拥有的: 我可能已经想到了: 还是我在这里认为完全错误? 问题答案: VARCHAR用于任何KEY的问题在于它们可以保留WHITE SPACE。空格由任何无法在屏幕上读取的字符组成,例如空格标签,回车符等。当您开始追查为什

  • 问题内容: 我在80多个不同的表中都有一个ReferenceIDvarchar(6)列。我需要在分配ID的政府组织实施更改之后,将其扩展到整个db的varchar(8)。 我希望声明一个游标以获取表名,如下所示: 然后按如下所示编辑类型: 之所以失败,是因为该列是某些表中主键的一部分(并且PK中包含的列因表而异)。 我真的不想不必为每个表手动删除并重新创建每个PK。 在游标中,有一种方法可以在更改

  • 问题内容: 由于多种原因^,我想在某些Django模型中使用UUID作为主键。如果这样做,我仍然可以使用通过ContentType使用通用关系的外部应用程序,例如“ contrib.comments”,“ django-voting”或“ django-tagging”吗? 以“ django-voting”为例,Vote模型如下所示: 该应用似乎假设要投票的模型的主键是整数。 内置的注释应用程序

  • 问题内容: 在我的项目中,我习惯将字符串转换为,但是如果字符串不是type,它将抛出,那么如何验证该字符串? 问题答案: 您应该使用正则表达式进行验证,例如: 用鸡蛋测试 或带括号

  • 是否可以重载一个字段类型成为另一个字段类型? 如果是,是否可以提供一些例子?

  • 我刚到Spring 我尝试使用spring rest api和Hibernate更新Mysql中的一个现有值。但它每次都会抛出一个错误。 错误消息: