Aprimorar método criado para generic dao

Criei um método para o meu dao genérico e gostaria de saber se tem algum jeito de aprimorar o código em si, pois estou achando ele muito verboso. O método em si faz o update apenas de valores alterados, ou seja, caso algum valor venha como null, o método substitui o null pelo valor do objeto no banco de dados. Gostaria de usar algo como stream, mas não consigo executar nenhum método dps de usar setAcessible(true) do pacote java.reflection. Vou deixar o método abaixo.

public void dynamicUpdate(T object) {
		try {
			T objectDB = this.manager.find(clazz, object.getClass().getDeclaredMethod("getId").invoke(object));
			Class<?> generic = object.getClass();
			Class<?> genericDB = objectDB.getClass();
			while (generic != null) {
				for (Field field : generic.getDeclaredFields()) {
					field.setAccessible(true);
					if (field.get(object) == null) {
						Field declaredField = genericDB.getDeclaredField(field.getName());
						declaredField.setAccessible(true);
						field.set(object, declaredField.get(objectDB));
					}
				}
				generic = generic.getSuperclass();
				genericDB = genericDB.getSuperclass();
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			this.manager.merge(object);
		}
	}

Aprendi com o professor que qualquer classe com até 40 linhas de código, está em seu formato ideal. Então seu código não está verboso.

Não posso lhe ajudar com o stream, mas minha dica seria para você substituir o try comum pelo método try-with-resource:

 try (T objectDB = this.manager.find(clazz, object.getClass().getDeclaredMethod("getId").invoke(object))) {
    //resto do código...
1 curtida

Obrigado pela ajuda