简体   繁体   English

Spring 数据 jdbc 拼写

[英]Spring data jdbc spel

I tried to play with spring data jdbc after several month of spring data mongodb and jpa... And my surprise... I don't find my favorite function easily: Example, Predicate, Spel... I tried to play with spring data jdbc after several month of spring data mongodb and jpa... And my surprise... I don't find my favorite function easily: Example, Predicate, Spel...

So, at this time, I tried to have a @query working with spel... and I have a doubt... it exists????所以,此时,我试图让@query 与 spel 一起工作......我有一个疑问......它存在????

2020-06-25 18:45:47.566 ERROR [,,,] 15472 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: No value supplied for the SQL parameter '#{#query.lastname}': No value registered for key '#{#query.lastname}'] with root cause

org.springframework.dao.InvalidDataAccessApiUsageException: No value supplied for the SQL parameter '#{#query.lastname}': No value registered for key '#{#query.lastname}'

My request is very simple:我的要求很简单:

 public interface UserRepository extends PagingAndSortingRepository<User, Long> {

    User findByLastname(String lastname);

    @Query("select * from USER where lastname= :#{#query.lastname} and firstname= :#{#query.firstname} and age=:#{#query.age}")
    Page<User> findBySearchUserQuery(@Param("query") SearchUserQuery query, Pageable page);

}

Thx for your help, regards Nico谢谢你的帮助,尼科

As of now Spring (until Spring Data JDBC 2.1) @Query supports only named parameters, no support using SPEL in @Query.截至目前 Spring(直到 Spring 数据 JDBC 2.1)@Query 仅支持命名参数,不支持在 @Query 中使用 SEL。 The simplest solution will be providing all parameters to query methods.最简单的解决方案是为查询方法提供所有参数。

@Query("select u from USER as u where u.lastname= :lastname and u.firstname= :firstname and u.age=:age")
Page<User> findBySearchUserQueryParams(String firstname, String lastname, int age, Pageable page);

Spring data jdbc reference document Spring 数据 jdbc 参考文档

You should not write [*] in the query but name the class as some name and return it您不应该在查询中写 [*],而是将 class 命名为某个名称并返回它

your query will be something like this您的查询将是这样的

 @Query("select u from USER as u where u.lastname= :#{#query.lastname} and u.firstname= :#{#query.firstname} and u.age=:#{#query.age}")
    Page<User> findBySearchUserQuery(@Param("query") SearchUserQuery query, Pageable page);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM