Modo correto de se usar Like em JPA/Hibernate

Salve, salve!

Aprendi um pouco de Java na faculdade, depois me “aprofundei” por conta própria, e acredito que por isto eu não esteja utilizando as coisas como deveria ser…

Utilizo o Like da seguinte forma:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("artezy"); EntityManager em = emf.createEntityManager(); List<PfLocal> result = null; try { result = em.createNamedQuery("PfLocal.findLikeNomeLocal") .setParameter("nomeLocal", "%" + NomeLocal + "%") .getResultList(); } catch (Exception e) { e.printStackTrace(); } return (result);

E no PfLocal tenho o seguinte código:

@Entity @Table(name = "pf_local") @XmlRootElement @NamedQueries({ @NamedQuery(name = "PfLocal.findAll", query = "SELECT p FROM PfLocal p"), @NamedQuery(name = "PfLocal.findByNome", query = "SELECT p FROM PfLocal p WHERE p.nome = :nome"), //Queries Personalizadas @NamedQuery(name = "PfLocal.findLikeNomeLocal", query = "SELECT p FROM PfLocal p Where p.nome LIKE ':nomeLocal' ORDER BY p.nome"), })

Isto funciona perfeitamente, mas recentemente comecei a utilizar também os controladores gerados pelo net beans que ja vem com os eventos create, destroy, edit, variações de find { public PfLocal findPfLocal(Integer id) - public List findPfLocalEntities() - public List findPfLocalEntities(int maxResults, int firstResult) - private List findPfLocalEntities(boolean all, int maxResults, int firstResult) } mas Nenhum com like.

Isto de fato não é gerado? O modo correto é criar a query manual, lembrando que uso a mesma query de like em varios locais, então é mais sensato eu deixar ela ou no controlador ou no modelo para ser utilizada por todos.

Aguardo ajuda.

att.

ps.: Qual esta sendo mais utilizado o Forum ou o Respostas??? kk

Olá,

Normalmente o uso do LIKE é empregado para consultas “coringas”, ou seja, quando queremos trazer registros por conter um “fragmento, um pedaço…” do que queremos encontrar.

Quando temos certeza do que queremos, o operador “=” é a melhor opção, exemplo:

SELECT * FROM TABLE WHERE nome = ‘Robinson Silva’; //essa consulta é mais eficiente.

Usando o like, exigimos um pouquinho mais de “processamento” do nosso BD, exemplo:

SELECT * FROM TABLE WHERE nome LIKE ‘%Robinson Silva%’; //nosso BD varrerá todos os registros, e procurará especificamente na coluna nome o texto ‘Robinson Silva’, ele varrerá todo o conteudo da coluna afim de encontrar nossa “condição”.

http://aserlorenzo.com/manSQL/Oracle/dml/select/opersql.htm

robinsonbsilva, desculpe, mas sua resposta é totalmente descartável.

Abri o chamado na área de JPA/Hibernate, e portanto queria opiniões sobre o uso do LIKE em JPA/HIBERNATE.

Sei pra que serve um LIKE e sei como usá-lo em SQL. Preciso mesmo é de abrir uma discussão onde possamos trocar conhecimento e chegar ao melhor modo de usar o LIKE no JPA

Mesmo assim obrigado por compartilhar o seu conhecimento conosco.

att.

ps.: irei alterar o título do post para evitar este tipo de confusão. :wink: