2009-04-08 1 views
2

JPA Entity의 기본 키로 []을 (를) 사용하는 데 문제가 있습니까?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를 쿼리하는 데 문제가 있음을 명심하십시오. db id는 일반적으로 숫자입니다. 쿼리를 직접 작성하는 것이 훨씬 쉽습니다.

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

이 가정은 잘못되었습니다. –

관련 문제