Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa 在存储库接口或实体类中定义查询之间的区别?_Jpa_Repository_Spring Data_Spring Data Jpa_Named Query - Fatal编程技术网

Jpa 在存储库接口或实体类中定义查询之间的区别?

Jpa 在存储库接口或实体类中定义查询之间的区别?,jpa,repository,spring-data,spring-data-jpa,named-query,Jpa,Repository,Spring Data,Spring Data Jpa,Named Query,如果这是一个非常愚蠢的问题,那么很抱歉,但是我想知道,除了实现之外,在存储库中定义查询是否有任何区别: public interface EmployeeRepository<Employee, Integer> { @Query("select e from Employee e where e.name like :name") public List<Employee> findByName(@Param("name") String name);

如果这是一个非常愚蠢的问题,那么很抱歉,但是我想知道,除了实现之外,在存储库中定义查询是否有任何区别:

public interface EmployeeRepository<Employee, Integer> {

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

这两种方法都有优点/缺点吗?

一般来说,我们建议在存储库界面定义查询,原因很简单:它在概念上更接近查询执行。另外,
@Query
在涉及其他查询时,例如需要触发以实现分页时,有一些高级选项

但是,如果要在多个查询方法上重复使用查询定义,使用命名查询仍然是一个合理的选择


IMO最重要的方面是团队之间的一致性,或者至少是每份回购协议的一致性。如果您从命名查询开始,请不要将它们与
@Query
定义混淆,因为这可能会使开发人员感到困惑,或者至少使其更难理解正在发生的事情。

一般来说,我们建议在存储库界面定义查询,原因非常简单:它在概念上更接近查询执行。另外,
@Query
在涉及其他查询时,例如需要触发以实现分页时,有一些高级选项

但是,如果要在多个查询方法上重复使用查询定义,使用命名查询仍然是一个合理的选择


IMO最重要的方面是团队之间的一致性,或者至少是每份回购协议的一致性。如果您从命名查询开始,请不要将它们与
@Query
定义混淆,因为这可能会使开发人员感到困惑,或者至少使其更难理解正在发生的事情。

感谢Oliver的回复!如果有机会的话,你能看看我关于SpringDataJPA分页的另一个问题来确认我选择的答案吗?谢谢,哈哈,谢谢奥利弗的回复!如果有机会的话,你能看看我关于SpringDataJPA分页的另一个问题来确认我选择的答案吗?谢谢,哈哈
@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;
    //...
}