java - 如何使用 @Query Spring JPA 注解执行查询

标签 java spring jpa

我正在尝试使用接口(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/

相关文章:

java - JPA native 查询返回 Double 或 BigDecimal

java - JavaFX-应用程序中的异常

java - "Non-static variable this cannot be referenced from a static context"创建对象时

java - Spring data gemfire 不支持 REQUIRES_NEW 事务

java - 在 SQL 自省(introspection)中使用 Liquibase 生成的 Hibernate 类

hibernate Java 8 ZonedDateTime

java - 使用Weka API时如何在堆叠方法中指定基分类器?

java - 当用户禁用 GPS 时如何在 MapActivity 上收到警报

java - 你在哪里定义spring bean配置文件

jpa - Play [2.11] jpa事务