Разница между определением запросов в интерфейсе репозитория или классе сущности?

StackOverflow https://stackoverflow.com//questions/25012051

Вопрос

Извините, если это очень нубский/глупый вопрос, но мне было интересно, есть ли какая-либо разница, помимо реализации, между определением запроса в репозитории:

public interface EmployeeRepository<Employee, Integer> {

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

и определение запроса в сущности:

@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;
    //...
}

Есть ли преимущества/недостатки у каждого из них?

Это было полезно?

Решение

Вообще говоря, мы рекомендуем определять запросы в интерфейсе репозитория по очень простой причине:концептуально это ближе к выполнению запроса.Также, @Query имеет несколько расширенных опций, когда дело доходит до дополнительных запросов, например.необходимо запустить для реализации нумерации страниц.

Однако если вы хотите повторно использовать определение запроса для нескольких методов запроса, использование именованного запроса по-прежнему является разумным вариантом.

Самый важный аспект, по моему мнению, — это последовательность либо внутри команды, либо, по крайней мере, в каждом репо.Если вы начинаете с именованных запросов, не путайте их с @Query определения, поскольку это может сбить с толку разработчиков или, по крайней мере, затруднить понимание того, что происходит.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top