本机查询作为变量

时间:2015-12-04 07:37:30

标签: java sql-server sql-server-2008 spring-data spring-data-jpa

有没有办法将原生查询作为变量传递?

我想使用类似的东西

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

1 个答案:

答案 0 :(得分:2)

您需要一个自定义存储库来解决您的问题。根据{{​​3}},您可以从界面开始:

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 Data Repository中扩展创建的接口,其余部分由框架完成。

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

}

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