Probeer het op te slaan als bytes:
UUID uuid = UUID.randomUUID();
byte[] uuidBytes = new byte[16];
ByteBuffer.wrap(uuidBytes)
.order(ByteOrder.BIG_ENDIAN)
.putLong(uuid.getMostSignificantBits())
.putLong(uuid.getLeastSignificantBits());
con.createQuery("INSERT INTO TestTable(ID, Name) VALUES(:id, :name)")
.addParameter("id", uuidBytes)
.addParameter("name", "test1").executeUpdate();
Een beetje uitleg:je tabel gebruikt BINARY (16), dus het serialiseren van UUID als zijn onbewerkte bytes is een heel eenvoudige benadering. UUID's zijn in wezen 128-bits ints met een paar gereserveerde bits, dus deze code schrijft het uit als een big-endian 128-bits int. De ByteBuffer is gewoon een gemakkelijke manier om twee longs in een byte-array te veranderen.
In de praktijk zijn alle conversie-inspanningen en hoofdpijn de 20 bytes die u per rij bespaart niet waard.