如何实现和执行spring数据jpa中的自定义方法?

时间:2018-06-08 12:11:15

标签: java spring hibernate spring-data-jpa spring-data

我正在为我的项目使用spring data jpa,我有以下代码:

我的存储库:

@Repository
@Transactional
public interface StudentRepository extends PagingAndSortingRepository<Student, Long> {

  List<Student> findByIdIn(List<Long> ids);

}

我的实体是:

@Entity
public class Student implements Serializable {

  private static final long serialVersionUID = 1L;

  private Long id;

  // other fields
  // getters/setters

}

在我的服务类的某个地方,我有

@Autowired
StudentRepository  studentRepository;

然后我从我的服务层调用findByIdIn,如:

studentRepository.findByIdIn(listOfIds);

findByIdIn(listOfIds)方法完美无缺,一切都按预期工作。

我知道findByIdIn()方法的实现是由spring数据jpa提供的。

但是我无法确定它的实现在哪里? 它的实施究竟是什么? 这些方法是否在运行时根据方法名称生成?如果是,它们是如何动态生成和执行的?

谢谢!

1 个答案:

答案 0 :(得分:0)

你可以在Spring代码的核心部分挖掘一下它是如何工作的(https://github.com/spring-projects/spring-data-commons/tree/master/src/main/java/org/springframework/data/repository),但基本上,它是在启动时将接口方法解析为HQL。

您可以测试只是编辑一个不存在的字段的方法名称,并且在启动时你会收到一条错误,说明没有字段。