Опитайте да го съхраните като байтове:
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();
Малко обяснение:вашата таблица използва BINARY(16), така че сериализирането на UUID като сурови байтове е наистина лесен подход. UUID по същество са 128-битови int с няколко запазени бита, така че този код го изписва като 128-битово int с голям ендиан. ByteBuffer е просто лесен начин да превърнете две дълги в масив от байтове.
Сега на практика всички усилия за преобразуване и главоболия няма да струват 20-те байта, които спестявате на ред.