Erro no where ao executar metodo

Pessoal,

tenho as seguintes classe :

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;
}





public class ItemOrcamentoHelper {
	
	Metodo metodo = new Metodo();


		try {
			ini = new InitialContext();
			PrecoPorMetodoServiceLocal PrecoPorMetodoBean = (PrecoPorMetodoServiceLocal)ini.lookup("PrecoPorMetodoServiceBean/local");
			todosOsMetodosComPrecoPorGrupoEspec = listaTodosMetodosDaAmostraComPrecoGrupo(analisesContratadas);


}
}

public class PrecoPorMetodoServiceBean implements PrecoPorMetodoServiceLocal {



    public List<Object> selecionaprecopormetodo(Metodo metodo){
    
        try {
        	
   		 Query consulta6 = em.createQuery("select distinct p.grupo, p.preco FROM PrecoPorMetodo p WHERE p.metodo = :metodo_id");
   		 consulta6.setParameter("metodo_id", metodo);
   		 return  consulta6.getResultList();
        }
        catch (Throwable ex) {             
            System.err.println("failed.----" + ex);  
            throw new ExceptionInInitializerError(ex);  
        }  
}


O erro esta aqui :

   		 Query consulta6 = em.createQuery("select distinct p.grupo, p.preco FROM PrecoPorMetodo p WHERE p.metodo = :metodo_id");
   		 consulta6.setParameter("metodo_id", metodo);
   		 return  consulta6.getResultList();

O erro esta no P.METODO.

erro :
13:41:47,070 ERROR [STDERR] failed.----java.lang.IllegalStateException: org.hibe
rnate.TransientObjectException: object references an unsaved transient instance

  • save the transient instance before flushing: br.com.cqa.lims.analise.Metodo

Alguem pode me ajudar ??

Na sua query você busca pelo id, e você passa para o setParameter um objeto metodo, deveria ser o id desse objeto.

tentei fazer um teste


			if (metodo.getId() == null) {
				 System.out.print("teste");
				
			}

                 List<Object> objectList =PrecoPorMetodoBean.selecionaprecopormetodo(metodo);

Meu metodo.getid esta nullo, acho que deve ser por isso o erro :

como eu faço para colocar um valor no metodo.getId ???

bem, em geral o valor do id é gerado automaticamente pelo próprio banco de dados que você esteja utilizando quando salvamos um objeto nesse banco.Você está buscando algo que não existe, então o que você pode fazer é tratar a exceção no seu método para quando não receber nenhum resultado.