public String buildUpdateFor (T entity)	{
		StringBuilder sql = new StringBuilder(updateInstruction);
		Object value = null;
		
		for (Field field : columnMappings.keySet()) {
			
			String column = columnMappings.get(field);
			int replaceStart = sql.indexOf(":" + column);
			int replaceEnd = replaceStart + column.length() + 1;
			
			try {
				field.setAccessible(true);
				if (field.isAnnotationPresent(ManyToOne.class) ||
				   (field.isAnnotationPresent(OneToOne.class) && "".equals(field.getAnnotation(OneToOne.class).mappedBy()))) {
					value = getReferencedId(field.get(entity));
					sql.replace(replaceStart, replaceEnd, value == null ? "NULL" : getSqlValue(value));
				} else {				
					value = field.get(entity);					
					sql.replace(replaceStart, replaceEnd, value == null ? "NULL" : getSqlValue(value));
					
					if (field.getName().equals(idProperty.getName()))
						sql.replace(sql.indexOf(":" + idColumn), sql.indexOf(":" + idColumn) + idColumn.length() + 1, value == null ? "NULL" : getSqlValue(value));
				}
			} catch (Exception e) {
				throw new RuntimeException("Erro ao obter as propridades do objeto.", e);
			}
		}
		
		return sql.toString();
	}