在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通常是数字的原因。手写查询要容易得多。