[RESOLVIDO]Ajudar para montar select com distinct

tenho essa seguinte estrutura na minha tabela fisicamente :

CREATE TABLE preco_por_metodo
(
id serial NOT NULL,
grupo integer NOT NULL,
metodo_id bigint NOT NULL,
especificacao_id bigint NOT NULL,
preco numeric(19,2) NOT NULL,
CONSTRAINT preco_por_metodo_pkey PRIMARY KEY (id),
CONSTRAINT preco_por_metodo_especificacao_id FOREIGN KEY (especificacao_id)
REFERENCES especificacao (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT preco_por_metodo_metodo_id FOREIGN KEY (metodo_id)
REFERENCES metodo (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)

minha entidade precopormetodo

@Entity(name="PrecoPorMetodo") 

@Table(name="preco_por_metodo")
public class PrecoPorMetodo extends Entidade{

	private static final long serialVersionUID = -4715774435380827257L;

	
	private int grupo;
	@ManyToOne
	@JoinColumn(name="metodo_id", nullable=false)
	private Metodo metodo;
	@ManyToOne
	@JoinColumn(name="especificacao_id", nullable=false)
	private Especificacao especificacao;
	
	
	private Double preco;
	
	////getters e setters

meus dados na tabela sao :
id grupo metodo_id especificacao_id preco
1 5 5278 706 900.00
2 5 4435 706 900.00
3 5 2179 706 900.00
4 5 1498 706 900.00
5 5 1601 706 900.00
6 5 3973 706 900.00

gostaria que com distinct (grupo e preco), saisse o resultado :

grupo preco
5 900.00

a minha duvida é :

se eu fizer um SELECT distinct p PrecoPorMetodo p, o resultado irá aparecer TODOS certo ??? como aparecer agrupado, igual o resultado acima ??

Bom dia a todos

evandro_araujo, nao entendi muito bem o que voce está querendo, se é um problema na hora de montar a tua estrutura do SQL ou na apresentação, mas um jeito muito simples de resolver isso é trazendo somente os campos que voce quer que sejam agrupados, ou se precisar de mais campos, use select dentro de select, talvez isso te ajude a resolver mas pra voce mostrar somente grupo|preco

select grupo, sum(preco) as preco from tabela 

ou

select distinct grupo, preco from tabela

Espero ter ajudado!

tentei colocar desta forma :

        	StringBuffer sbQuery = new StringBuffer();		
			sbQuery.append(" select distinct grupo,preco FROM PrecoPorMetodo p");
		
			Query query = em.createQuery(sbQuery.toString());
					
			 List<PrecoPorMetodo> metodo3 = query.getResultList();
			 for (PrecoPorMetodo met3:metodo3) {
				 System.out.println("grupo "+met3.getGrupo());
			 } 	 		 
		 

ERRO:

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to br.com.cqa.lims.orcamento.PrecoPorMetodo

Poe um uniqueResult(), apos o fechamento do seu createQuery.

Query query = em.createQuery(sbQuery.toString()).uniqueResult(); 

A questao é que ele so podera retornar um resultado, se retornar mais de 1 gera excessao.

Voce pode pegar tudo numa lista, so por .list() ao final do createQuery:

List<PrecoPorMetodo> metodo3 = em.createQuery(sbQuery.toString()).list();

ele executa normalmente este linha

List<PrecoPorMetodo> metodo3 = query.getResultList();

O meu problema esta aqui :

			 for (PrecoPorMetodo met3:metodo3) {
				 System.out.println("grupo "+met3.getGrupo());
			 } 	 	

Seu erro esta relacionado a um cast, pelo menos foi o que primeiramente a execessao que voce postou nos mostra.
O Errou é outro agora ? aparece outra execessao ? Qual excessao ?

o erro :

[Ljava.lang.Object; cannot be cast to modelo.PrecoPorMetodo at modelo.main.main(main.java:138)

ele para neste linha :

 for (PrecoPorMetodo met311:metodo311) {

resolvi dessa forma :

		 Query consulta6 = em.createQuery("select distinct p.grupo, p.preco FROM PrecoPorMetodo p ");
		 
		 List<Object> objectList = consulta6.getResultList();
		 Iterator iterator = objectList.iterator();
		 System.out.println("Emp Id\t Name\tSalary");
		 while(iterator.hasNext()){
			 Object []obj = (Object[])iterator.next();
			 System.out.print(obj[0]);
			 
			 System.out.print(" ");
			 
			 System.out.println(obj[1]);
		 }