Boa tarde pessoal! Na sequência vou postar um modo de organização de código onde é realizado uma consulta simples com Glassfish… se alguém tiver sujestões ou críticas, por favor, fiquem à vontade.
É utilizado o padrão Facade para este exemplo…
Está e a Entidade, onde ficam os atributos, também constantes com os nomes dos paramentos ja definidos, assim evitando erros de escrita e as próprias queries de consulta:
@Entity
@Table(name = "nome_tabela")
@NamedQueries({
@NamedQuery(name = NomeEntidade.qNOME_QUERY,
query = " SELECT e FROM EntidadeTeste e "
+ " WHERE e.atributo1 = :" + EntidadeTeste.pATRIBUTO1 + " AND e.atributo2 = :" + EntidadeTeste.pATRIBUTO2 + ""
+ " ORDER BY e.atributo3 DESC "))
public class EntidadeTeste {
//constantes gerais
public static final String qNOME_QUERY = "EntidadeTeste.MelhorNomeParaSuaConsulta";
public static final String pATRIBUTO1 = "pAtributo1";
public static final String pATRIBUTO2 = "pAtributo2";
// mapeamento jpa
@JoinColumn(name = "fk_de_outra_entidade", nullable = false)
@ManyToOne
private OutraEntidade atributo1;
@Column
private String atributo2;
@Column
private String atributo3;
// GETTERS AND SETTERS
...
}
(mas porque colocou na entidade as queries?) --> eu acho muito bacana a ideia como o JPA trata suas referencias, utilizado Annotation @NamedQueries… na sequência mostrarei como é possível organizar mais ainda o código, e utilizar as queries:
@Stateless
public class EntidadeTesteFacade extends AbstractFacade<EntidadeTeste> {
public EntidadeTeste nomeDoSeuMetodo(EntidadeTeste entidadeTeste) {
TypedQuery<EntidadeTeste> q = getEntityManager().createNamedQuery(EntidadeTeste.qNOME_QUERY, EntidadeTeste.class);
q.setParameter(EntidadeTeste.pATRIBUTO1, entidadeTeste.getAtributo1());
q.setParameter(EntidadeTeste.pATRIBUTO2, entidadeTeste.getAtributo2());
return q.getSingleResult();
}
}
então nessa classe EntidadeTesteFacade é realmente onde fica o método que fará o retorno do resultado obtido pelo Glassfish, sendo este podendo ser utilizado em um Controller qualquer, para posteriormente os resultados serem atribuídos a uma tela .xhtml por exemplo.
Não coloquei muito detalhes, afinal este código é para quem conhece como funciona o Java, mas qualquer dúvida, poste ai que repondo quando puder 
[]'s \o/