private List<String> validateSimpleUniqueConstraintsDefinedOnFields(Identifiable<?> entity) {
   Class<?> entityClass = getClassWithoutInitializingProxy(entity);
   List<String> errors = newArrayList();
   for (Field field : entityClass.getFields()) {
     Column column = field.getAnnotation(Column.class);
     if (column != null && column.unique()) {
       Map<String, Object> values = newHashMap();
       values.put(field.getName(), jpaUtil.getValueFromField(field, entity));
       if (existsInDatabaseOnAllObjects(entity, values)) {
         errors.add(simpleUniqueConstraintError(entity, field.getName()));
       }
     }
   }
   return errors;
 }
 private Map<String, Object> getPropertyConstraints(
     Object entity, Class<?> entityClass, UniqueConstraint u, String prefix) {
   Map<String, Object> values = newHashMap();
   for (String column : u.columnNames()) {
     Method method = columnNameToMethod(entityClass, column);
     if (method != null) {
       values.put(prefix + jpaUtil.methodToProperty(method), invokeMethod(method, entity));
     } else {
       Field field = columnNameToField(entityClass, column);
       if (field != null) {
         values.put(prefix + field.getName(), jpaUtil.getValueFromField(field, entity));
       }
     }
   }
   return values;
 }