2009-04-08 10 views
2

JPAエンティティの主キーとしてバイト[]を使用する際に問題はありますか?UUIDをデータベースの主キーとして使用すると、Javaのタイプはバイト[

プライマリキーとしてUUIDを使用したいが、文字列として格納すると、大きすぎると感じる。

私は私のエンティティのIDとしてそれをバイト[]として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; 

    } 

私はDBに、この上のインデックスを入れてどんな問題があるのでしょうか?私はPostgresとHSQLの両方を使用しています。 JPAプロバイダとしてHibernateを使用しています。

答えて

1

SQLクライアントを使用するユーザーは、byte [] IDのクエリに問題があることに注意してください。そのため、dbidは通常数値です。クエリを手書きで書く方がはるかに簡単です。

1

プライマリキーを通常の4バイト(int)よりも大きくすると、少しのパフォーマンス上のペナルティ以外の問題は発生しないと思います。

なぜ主キーとしてUUIDが必要ですか?代理整数キーをオートインクリメントで使用するだけの理由はありますか?

+0

IDはデータベース外で生成され、UUIDを使用してDBからオブジェクトを取得できる必要があります。 http://iops.io/blog/storing-billions-uuid-fields-mysql-innodbに関する – systemoutprintln

1

私は以前の回答者と同じように、キーをバイトとして保存すると、問題の診断を行うときに手作業でクエリすることが難しくなります。 char(x)フィールドまたはvarchar(x)フィールドを使用すると、スペースが大幅に消費されず、サポートスタッフが読みやすくなります。

+0

この仮定は間違っています –

関連する問題