Prova a salvarlo come byte:
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();
Una piccola spiegazione:la tua tabella sta usando BINARY(16), quindi serializzare UUID come byte grezzi è un approccio davvero semplice. Gli UUID sono essenzialmente int a 128 bit con alcuni bit riservati, quindi questo codice lo scrive come un int big-endian a 128 bit. ByteBuffer è solo un modo semplice per trasformare due long in un array di byte.
Ora, in pratica, tutto lo sforzo di conversione e il mal di testa non varranno i 20 byte che salvi per riga.