QuerySyntaxException: unexpected token: SUM

//CONSULTA 1 - FUNCIONANDO

//return this.em.createQuery("FROM Estoque e join fetch e.produtos",Estoque.class).getResultList();

//CONSULTA 2 - FUNCIONANDO

//return this.em.createQuery("FROM Estoque e join fetch e.produtos prod GROUP BY prod.id",Estoque.class).getResultList();

//CONSULTA 3 - DANDO PAU

return this.em.createQuery("SUM (e.quantidade) FROM Estoque e join fetch e.produtos prod GROUP BY prod.id",Estoque.class).getResultList();

Nesse caso, precisa informar SELECT no início da JPQL.

Boa noite Lucas,
Já fiz isso, jpa coloquei o SELECT, já fiz várias combinações com SELECT, SUM, etc… e nada funciona, dá sempre o mesmo erro.

Tente assim:

SELECT prod.id, SUM(e.quantidade)
FROM Estoque e JOIN FETCH e.produtos prod
GROUP BY prod.id

Deu um erro, só que agora enorme, vou postar aqui:

java.lang.IllegalArgumentException: org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list [FromElement{explicit,not a collection join,fetch join,fetch non-lazy properties,classAlias=prod,role=br.com.pmro.coad.modelo.Estoque.produtos,tableName=Produto,tableAlias=produto2_,origin=Estoque estoque0_,columns={estoque0_.id ,className=br.com.pmro.coad.modelo.Produto}}] [SELECT prod.id, SUM(e.quantidade) FROM br.com.pmro.coad.modelo.Estoque e JOIN FETCH e.produtos prod GROUP BY prod.id

A relação entre Estoque e Produto é unidirecional? Como está o mapeamento nas classes?

Desculpe pela demora ao responder, mas tive problemas na minha máquina.

@Entity
public class Estoque implements Serializable {

	//@ManyToMany(cascade = CascadeType.REFRESH, fetch = FetchType.LAZY)
@ManyToMany
private List<Produto> produtos = new ArrayList<Produto>();
public List<Produto> getProdutos() {
	return produtos;
}

=================

@Entity
public class Pedido implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue
private Integer id;

@ManyToMany
private List<Departamento> departamentos = new ArrayList<Departamento>();
public List<Departamento> getDepartamentos() {
	if (departamentos.size() >1) {
		departamentos.clear();
	}
	return departamentos;
}

@ManyToMany
private List<Setor> setores = new ArrayList<Setor>();
public List<Setor> getSetores() {
	if (setores.size() >1) {
		setores.clear();
	}
	return setores;
}

@ManyToMany
private List<Usuario> usuarios = new ArrayList<Usuario>();
public List<Usuario> getUsuarios() {
	if (usuarios.size() >1) {
		usuarios.clear();
	}
	return usuarios;
}

public Pedido() {
}

public Integer getId() {
	return id;
}

public void setId(Integer id) {
	this.id = id;
}


public void adicionaDepartamento(Departamento departamento) {
	if (departamentos.isEmpty()){
		this.departamentos.add(departamento);
	}
	departamentos.clear();
	this.departamentos.add(departamento);
}
public void adicionaSetor(Setor setor) {
	if (setores.isEmpty()){
		this.setores.add(setor);
	}
	setores.clear();
	this.setores.add(setor);
}
public void adicionaUsuario(Usuario usuario) {
	if (usuarios.isEmpty()){
		this.usuarios.add(usuario);
	}
	usuarios.clear();
	this.usuarios.add(usuario);
}


public void removeDepartamento(Departamento departamento) {
	this.departamentos.remove(departamento);		
}
public void removeSetor(Setor setor) {
	this.setores.remove(setor);		
}	
public void removeUsuario(Usuario usuario) {
	this.usuarios.remove(usuario);		
}

}

Manda a classe produto tb.

O GUJ barra as minhas mensagens toda hora dizendo que não posso enviar uma mensagem para mais de dois usuários, sendo que, sou novo sim, mas só estou enviando, ou tentando enviar, mensagem para uma única pessoa.