我在特定的类上动态构建本机查询,我需要将此查询传递给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();
}
答案 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();