本机查询作为变量

Native query as variable

有没有办法将本机查询作为变量传递?

我想使用类似的东西

@Component
public interface MyRepository extends JpaRepository<MyClass, long>{
    @Query(nativeQuery = true, value = query) 
    List<Sapf> find(String query);
}

您需要自定义存储库来解决您的问题。根据 the Spring Data documentation 你从一个界面开始:

public interface MyRepositoryCustom {
    List<Sapf> find(String query);
}

那么你需要去实现它。您需要注入实体管理器才能执行本机查询:

public class MyRepositoryCustomImpl implements MyRepositoryCustom {

    @PersistenceContext(unitName = "yourPersistenceUnitName")
    private EntityManager em;

    List<Sapf> find(String query) {
        Query query = em.createNativeQuery(query, Sapf.class);
        return query.getResultList();
    }
}

最后,您在 Spring 数据存储库中扩展创建的接口,剩下的由框架完成。

@Repository
public interface MyRepository extends JpaRepository<MyClass, long>, MyRepositoryCustom {

}

根据您的 Spring 配置,您的自定义实现应该会自动使用。如果没有,请查看文档以调整您的设置。