我正在尝试使用接口(interface)方法声明上的 @Query 批注使用 SpringData Jpa 编写查询。
界面是这样的:
public interface MyService {
@Query("select * from employee e where e.projectId = ?1")
public List<Employee> getEmployeesWorkingOnAProject(String projectId) throws MyException;
}
我还有一个实现这个接口(interface)的类:
@Component
public class ProjectServiceImpl implements ProjectService {
}
我不确定这个查询执行将如何工作以及如何在实现类中为 getEmployeesWorkingOnAProject 方法提供实现。
谢谢
最佳答案
在您的界面中,您应该扩展 JpaRepository(或任何其他 spring 数据存储库)。 然后您可以在任何 spring bean 类中 Autowiring 您的接口(interface)并调用 getEmployeesWorkingOnAProject()。
例如:
public interface MyService extends JpaRepository<Employee,Long> {
@Query("select * from employee e where e.projectId = ?1")
public List<Employee> getEmployeesWorkingOnAProject(String projectId) throws MyException;
}
@Component
public class ProjectServiceImpl implements ProjectService {
private final MyService service;
@Autowire // not necessary in spring 4.3 +
public ProjectServiceImpl(MyService service) {
this.service = service;
}
public List<Employee> getEmployeesWorkingOnAProject(String projectId) throws MyException {
return service.getEmployeesWorkingOnAProject();
}
}
但是,Spring Data 能够为您构建查询,因此没有理由在此示例中编写您自己的查询。
Spring 数据方式:
public interface MyService extends JpaRepository<Employee,Long> {
public List<Employee> findAllByProjectId(String projectId) throws MyException;
}
关于java - 如何使用 @Query Spring JPA 注解执行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43511635/