如何解决JpaRepository本机查询参数不起作用
jpaMainClass.java
package com.springjpa;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class JpaMainClass {
public static void main(String[] args) {
try {
SpringApplication.run(JpaMainClass.class);
} catch (Exception e) {
e.printstacktrace();
}
}
}
jpaController.java
package com.springjpa.controller;
import com.springjpa.entity.User;
import com.springjpa.repository.UserJpaRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Optional;
@RestController
@RequestMapping("jpa")
public class JpaController {
@Autowired
private UserJpaRepository userJpaRepository;
@GetMapping("get")
public User getUser(@RequestParam("name") String name) {
System.out.println("Request get "+name);
List<User> user = userJpaRepository.findUserByName(name);
if (!user.isEmpty()){
System.out.println("User List Contain Elements");
return user.get(0);
} else {
System.out.println("User List is Empty");
}
return null;
}
}
jpaRepository.java
package com.springjpa.repository;
import com.springjpa.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
import java.util.Optional;
public interface UserJpaRepository extends JpaRepository<User,Long> {
@Query(value = "SELECT * FROM user where name = ?1",nativeQuery = true)
List<User> findUserByName(String name);
}
通过使用上述结构,我试图通过“名称”及其返回的空列表[失败]来获取录音。
Hibernate: SELECT * FROM user where name = ?
2020-09-14 10:00:25.979 TRACE 4280 --- [nio-6060-exec-2] o.h.type.descriptor.sql.BasicBinder
: binding parameter [1] as [VARCHAR] - ['Nipuna']
User List is Empty
然后我尝试了以下查询,并且还返回了相同的空列表[失败]。
public interface UserJpaRepository extends JpaRepository<User,Long> {
@Query(value = "SELECT * FROM user where name = :name",nativeQuery = true)
List<User> findUserByName(@Param("name") String name);
}
因此,我不确定参数(:name,?1),并检查它是否是如下where子句中的硬编码名称,并正确返回了响应 [Pass]但硬编码。
public interface UserJpaRepository extends JpaRepository<User,Long> {
@Query(value = "SELECT * FROM user where name = 'Nipuna'",nativeQuery = true)
List<User> findUserByName(String name);
}
带有硬编码名称的请求和响应
解决方法
根据您在此处提到的错误
2020-09-14 10:00:25.979 TRACE 4280 --- [nio-6060-exec-2] o.h.type.descriptor.sql.BasicBinder
: binding parameter [1] as [VARCHAR] - ['Nipuna']
似乎您传递查询字符串的方式是错误的。因此,您可能会像这样传递它,
<BASE_URL_WITH_PATHS>?name='Nipuna'
如果是这样,请尝试以下操作
<BASE_URL_WITH_PATHS>?name=Nipuna
您不需要在引号内传递查询字符串。
,只需调试代码,发现它与request参数有关。
- URL传递的请求参数,例如
module_file
被纳入 在两种情况下都应考虑到请求参数是否为“ Don” 乔”或唐·乔。 - 所使用的查询也考虑了引号,这导致检索用户详细信息失败。请通过请求
没有任何引号的参数
'http://localhost:8090/jpa/get?name=%27Don%20Joe%27'
。
调试后的代码段:-
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。