Используя UUID в качестве первичного ключа базы данных, тип Java является байтом [] - PullRequest
2 голосов
/ 09 апреля 2009

Есть ли проблемы с использованием байта [] в качестве первичного ключа в объекте JPA?

Я хочу использовать UUID в качестве моего первичного ключа, но при хранении в виде строки я чувствую, что он будет слишком большим.

Я думал сделать что-то подобное, чтобы сохранить идентификатор в виде байта [] и установить его в качестве идентификатора моей сущности:

    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.

Ответы [ 3 ]

1 голос
/ 14 апреля 2009

Имейте в виду, что пользователи, использующие клиент SQL, будут иметь проблемы при запросе идентификаторов байтов []. Вот почему идентификаторы db обычно являются числами; гораздо проще писать запросы вручную.

1 голос
/ 14 апреля 2009

Я согласен с более ранним респондентом, что хранение ключей в виде байтов очень затруднит ручной запрос при диагностике проблем. Использование поля char (x) или varchar (x) не займет значительно больше места и будет намного проще для чтения службой поддержки.

1 голос
/ 09 апреля 2009

Не думаю, что с этим возникнут проблемы, кроме небольшого снижения производительности из-за того, что первичный ключ больше обычного 4-байтового (int).

Зачем вам нужен UUID в качестве первичного ключа? Почему вы не можете просто использовать суррогатный целочисленный ключ с автоинкрементом?

...