Spring数据中的动态查询

时间:2017-07-18 13:51:30

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

我在特定的类上动态构建本机查询,我需要将此查询传递给JpaRepository来执行它。结果都是一样的。我不知道这是否可行,但这只是解决我问题的方法。

一个例子:

@Component
public class DataCmd {
    public List<IncomingDataDTO> getAllIncomingData(String dynamicQuery){
        entity = this.getIncomingDataRepository().findAllByQuery(dynamicQuery);
    }
}


@Repository
public interface IncomingDataRepository extends JpaRepository<IncomingData, IncomingDataPK> {
    @Query(dynamicQuery)
    public List<IncomingData> findAllByQuery();
}

3 个答案:

答案 0 :(得分:1)

您无法在运行时将参数传递给注释,并且尝试使用查询参数调用存储库的方法,但它未定义。

直接执行SQL请求是个坏主意,你最好写一下这样的查询:

@Query("SELECT * FROM Table WHERE a = :id")
public List<IncomingData> findAllByQuery(@Param("id") long id);

或者,如果要动态构造查询,可以使用Spring Data的Specification或使用QueryDSL库。有关this post的更多信息。

答案 1 :(得分:0)

您可@Autowire EntityManager使用它执行普通SQL。这不需要@Query注释。

答案 2 :(得分:0)

使用

@Autowire EntityManager em;
DataCmd

,然后通过

查询您的数据
Query q = em.createNativeQuery(sql, IncomingData.class);
return q.getResultList();