Closed emobtech closed 7 years ago
Segue sugestão de implementação completa para este método:
/**
* {@inheritDoc}
*/
@Override
public T mergeHalf(I id, T entity) {
try {
final Class<T> entityClass = getEntityClass();
final StringBuilder sb = new StringBuilder();
final Map<String, Object> params = new HashMap<>();
//
sb.append("UPDATE ");
sb.append(entityClass.getCanonicalName());
sb.append(" SET ");
//
for (final Field field : entityClass.getDeclaredFields()) {
if (!field.isAnnotationPresent(Column.class)) {
continue;
}
//
field.setAccessible(true);
//
final String name = field.getName();
final Object value = field.get(entity);
//
if (value != null) {
sb.append(name).append(" = :").append(name);
params.put(name, value);
}
}
//
final String idName =
CrudUtilHelper.getMethodAnnotatedWithID(entityClass);
//
sb.append(" WHERE ").append(idName).append(" = :").append(idName);
params.put(idName, id);
//
final Query query = getEntityManager().createQuery(sb.toString());
//
for (final Map.Entry<String, Object> entry : params.entrySet()) {
query.setParameter(entry.getKey(), entry.getValue());
}
//
query.executeUpdate();
//
return entity;
} catch (final Exception e) {
throw new DemoiselleCrudException("Não foi possível salvar", e);
}
}
Esta linha deveria referenciar a instância da entidade, não o objeto que representa sua classe. Por isso o erro abaixo:
"object is not an instance of declaring class"
https://github.com/demoiselle/framework/blob/master/demoiselle-crud/src/main/java/org/demoiselle/jee/crud/AbstractDAO.java#L76