diff --git a/src/main/java/tech/ailef/snapadmin/external/dbmapping/CustomJpaRepository.java b/src/main/java/tech/ailef/snapadmin/external/dbmapping/CustomJpaRepository.java index 97640fca..63310a16 100644 --- a/src/main/java/tech/ailef/snapadmin/external/dbmapping/CustomJpaRepository.java +++ b/src/main/java/tech/ailef/snapadmin/external/dbmapping/CustomJpaRepository.java @@ -133,8 +133,13 @@ public int update(DbObjectSchema schema, Map params, Map params, Map findById(DbObjectSchema schema, Object id) { SimpleJpaRepository repository = schema.getJpaRepository(); - - Optional optional = repository.findById(id); + Object parsedId = parsePrimaryKey(schema, id); + Optional optional = repository.findById(parsedId); if (optional.isEmpty()) return Optional.empty(); else { @@ -194,7 +194,8 @@ private Object save(DbObjectSchema schema, DbObject o) { */ @Transactional("transactionManager") public void attachManyToMany(DbObjectSchema schema, Object id, Map> params) { - Optional optional = findById(schema, id); + Object parsedId = parsePrimaryKey(schema, id); + Optional optional = findById(schema, parsedId); DbObject dbObject = optional.orElseThrow(() -> { return new SnapAdminException("Unable to retrieve newly inserted item"); @@ -210,7 +211,8 @@ public void attachManyToMany(DbObjectSchema schema, Object id, Map traverseMany = new ArrayList<>(); for (String oId : idValues) { - Optional findById = findById(linkedSchema, oId); + Object linkedParsedId = parsePrimaryKey(linkedSchema, oId); + Optional findById = findById(linkedSchema, linkedParsedId); if (findById.isPresent()) { traverseMany.add(findById.get()); } @@ -324,7 +326,12 @@ public DbQueryResult executeQuery(String sql) { @SuppressWarnings("unchecked") @Transactional("transactionManager") public void delete(DbObjectSchema schema, String id) { - schema.getJpaRepository().deleteById(id); + Object parsedId = parsePrimaryKey(schema, id); + schema.getJpaRepository().deleteById(parsedId); } - + + private Object parsePrimaryKey(DbObjectSchema schema, Object rawId) { + DbField idField = schema.getFieldByName("id"); + return idField.getType().parseValue(rawId); +} } diff --git a/src/main/java/tech/ailef/snapadmin/external/dbmapping/fields/UUIDFieldType.java b/src/main/java/tech/ailef/snapadmin/external/dbmapping/fields/UUIDFieldType.java index 41b1974b..e8efa944 100644 --- a/src/main/java/tech/ailef/snapadmin/external/dbmapping/fields/UUIDFieldType.java +++ b/src/main/java/tech/ailef/snapadmin/external/dbmapping/fields/UUIDFieldType.java @@ -19,7 +19,10 @@ public String getFragmentName() { @Override public Object parseValue(Object value) { - return java.util.UUID.fromString(value.toString()); + if (value == null) return null; + String str = value.toString().trim(); + if (str.isEmpty()) return null; + return java.util.UUID.fromString(str); } @Override