Pergunta

Desculpe se esta é uma pergunta muito nooby/estúpida, mas queria saber se havia alguma diferença, além da implementação, entre definir uma consulta no repositório:

public interface EmployeeRepository<Employee, Integer> {

    @Query("select e from Employee e where e.name like :name")
    public List<Employee> findByName(@Param("name") String name);
}

e definindo uma consulta na entidade:

@Entity
@NamedQuery(name="Employee.findByName", query="select e from Employee e where e.name like :name")
public class Employee {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;
    //...
}

Tipo, existem vantagens/desvantagens em qualquer um deles?

Foi útil?

Solução

De modo geral recomendamos definir as consultas na interface do repositório por um motivo muito simples:está conceitualmente mais próximo da execução da consulta.Também, @Query tem algumas opções avançadas quando se trata de consultas adicionais que, por exemplo.precisa ser acionado para implementar a paginação.

No entanto, se você quiser reutilizar a definição de consulta em vários métodos de consulta, usar uma consulta nomeada ainda será uma opção razoável.

O aspecto mais importante da IMO é a consistência entre a equipe ou pelo menos por repositório.Se você começar com consultas nomeadas, não as confunda com @Query definições, pois isso pode confundir os desenvolvedores ou pelo menos dificultar a compreensão do que está acontecendo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top