Fazer update no banco a partir de uma lista

Estou tento um problema ao criar uma aplicação.

Tenho um Material com o campo quantidadeEstoque.

Ao inserir uma Nota Fiscal eu devo soma a quantidade de materiais que esta na nota com a quantidade em estoque, que é o meu campo quantidadeEstoque do Material, isso eu fiz com um select que me retorna o material e a quantidadeEstoque + quantidade na nota, por idnotaFiscal.

public List<Material> getMaterialEstoque() {
		Query query = entityManager
					.createQuery("select m.idMaterial, m.quantidadeEstoque+em.quantidade from EntradaMaterial as em join em.material as m where                                 em.idNotaFiscal = ?1 group by m.quantidadeEstoque, m.idMaterial,em.quantidade");
		query.setParameter(1, notaFiscal.getIdNotaFiscal());
		materialEstoque = query.getResultList();
	        return materialEstoque;
	}

todo o resultado do select é inserido em uma Lista como Jlang.Object, fiz outro metodo para atualizar o estoque utilizando a lista

	public void adicionarEstoque() {

			for (Material mats : materialEstoque) {
				Query query = entityManager
						.createQuery("update Material m set m.quantidadeEstoque = ?1 where m.idMaterial = ?2");
				query.setParameter(1, mats.getIdMaterial());
				query.setParameter(2, mats.getQuantidadeEstoque());
				query.getResultList();
			}

	}

Porem o erro acontece no for ao tentar transformar o materialEstoque que é Jlang.Object em Material

O framework de persistência não sabe converter seu select no objeto que você está querendo.
Seu select retorna dados tanto de Material quanto de EntradaMaterial, isso ele transforma numa lista de array de Object.
Algumas opções:

Boa sorte!

O resultTransformer funionou PERFEITO para o que eu precisava.


private Session getSession() {
            return ((Session) ((org.jboss.seam.persistence.EntityManagerProxy) entityManager)
		                    .getDelegate());
		           }

@SuppressWarnings("unchecked")
	public void armazenarEstoque() {
		try {
			org.hibernate.Query query = getSession().createQuery("select m.idMaterial as idMaterial, m.quantidadeEstoque+em.quantidade as quantidadeEstoque from EntradaMaterial as em join em.material as m where em.idNotaFiscal = ? group by m.quantidadeEstoque, m.idMaterial, em.quantidade");
			query.setParameter(0, notaFiscal.getIdNotaFiscal());
			query.setResultTransformer(new AliasToBeanResultTransformer(Material.class));
			results = (ArrayList<Material>) query.list();
			
			for(Material valor : results){
				Query queryUpdate = entityManager.createQuery("update Material m set m.quantidadeEstoque = ?1 where m.idMaterial = ?2");
				queryUpdate.setParameter(1, valor.getQuantidadeEstoque());
				queryUpdate.setParameter(2, valor.getIdMaterial());
				queryUpdate.executeUpdate();
			}
		} catch (EntityNotFoundException e) {
			facesMessages.add("Ocorreu um erro : " + e.getMessage());
		}
	}