微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JpaRepository本机查询参数不起作用

如何解决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);
}

数据库

enter image description here

通过使用上述结构,我试图通过“名称”及其返回的空列表[失败]来获取录音。

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);
    }

带有硬编码名称的请求和响应

enter image description here

解决方法

根据您在此处提到的错误

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参数有关。

  1. URL传递的请求参数,例如 module_file被纳入 在两种情况下都应考虑到请求参数是否为“ Don” 乔”或唐·乔。
  2. 所使用的查询也考虑了引号,这导致检索用户详细信息失败。请通过请求 没有任何引号的参数 'http://localhost:8090/jpa/get?name=%27Don%20Joe%27'

调试后的代码段:-

Successful retrieval` endpoint get request

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。