Skip to content

Melhoria #104

@egrohs

Description

@egrohs

Estou fazendo uns testes com demoiselle 3. Notei que o método mergeHalf (baseado em PATCH) do AbstractDAO parece incompleto e errado.

  1. ta invocando TUDO, os gets (o que é correto) e os sets tb (o que é errado)
  2. linha 76, ta passando erradamente a classe entityClass ao invés da instância entity

Abaixo segue uma implementação sugerida que vai direto no field com mapped column...

try {
			StringBuilder sb = new StringBuilder();
			sb.append("UPDATE ");
			sb.append(entity.getClass().getCanonicalName());
			sb.append(" SET ");
			for (Field method : entity.getClass().getDeclaredFields()) {
				method.setAccessible(true);
				if (method.isAnnotationPresent(Column.class)) {
					Object obj = method.get(entity);
					if (obj != null) {
						sb.append(method.getName()).append(" = ").append(obj).append(",");
					}
				}
			}
			if (sb.toString().endsWith(",")) {
				int i = sb.lastIndexOf(",");
				sb.delete(i, i + 1);
				// TODO ainda falta testar chaves multiplas com @EmbeddedId
				sb.append(" WHERE ").append(CrudUtilHelper.getMethodAnnotatedWithID(entity.getClass())).append(" = ")
						.append(id);
				getEntityManager().createQuery(sb.toString()).executeUpdate();
			}
			return entity;
		} catch (Exception e) {
			throw new DemoiselleCrudException("Não foi possível salvar", e);
		}

Att. Emanuel Motta Grohs

[UPDATE - Merlin]: apenas formatei o código pra ficar mais amigável ;)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions