当前位置: 首页 > 知识库问答 >
问题:

Spring JpaRepository findAll(示例)方法返回一个空列表

方长卿
2023-03-14
    @GetMapping("/admin/users/filtered")
    public String adminUserPageFiltered(@RequestParam String role, Model model) {
        ExampleMatcher matcher = ExampleMatcher
                .matchingAll()
                .withIgnoreNullValues()
                .withMatcher("role", contains().ignoreCase());
        User example = new User();
        example.setRole(role);
        System.out.println("example role: " + example.getRole());
        Iterable<User> userList = userRepository.findAll(Example.of(example, matcher));
        System.out.println("Userlist: " + userList);
        model.addAttribute("users", userList);
        return "adminUserPage";

    }

正如您在这里看到的,基本的程序流程是将一个param传递到这条路由,它用param设置的值创建一个新的用户对象(当前只有“role”,但我希望它会随着时间的推移而改变)

然后,findAll方法查找role=角色参数值的所有记录;

换句话说,我的SQL查询将如下所示:

SELECT * FROM users WHERE role="myParam"

在role=“admin”处运行此查询当前返回1条记录,这是预期的。

但是上面java代码中的findAll(示例)返回0条记录。

有人能告诉我为什么findAll方法没有找到任何记录,并且返回和空列表吗?

public class User {

    @Id
    @Column(name = "user_id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String username;
    private String password;
    private String role;
    private boolean enabled;

    public void setUsername(String username) {
        this.username = username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void setRole(String role) {
        this.role = role;
    }

    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }

    public String getPassword() {
        return password;
    }

    public String getUsername() {
        return username;
    }

    public String getRole() {
        return role;
    }

    public boolean getEnabled() {
        return enabled;
    }

    public Long getId() {
        return id;
    }

}
import com.example.sprintauthexample.model.User;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;


public interface UserRepository extends JpaRepository<User, Long> {

    @Query("SELECT u FROM User u WHERE u.username = :username")
    public User getUserByUsername(@Param("username") String username);

    @Query("SELECT COUNT(u) FROM User u WHERE u.enabled = true")
    public int getUserCount();

    @Query("SELECT COUNT(role) FROM User u WHERE u.role='USER' AND u.enabled=true")
    public int getUserRoleCount();
}

select user0_.user_id as user_id1_0_, user0_.enabled as enabled2_0_, user0_.password as password3_0_, user0_.role as role4_0_, user0_.username as username5_0_ from users user0_ where (lower(user0_.role) like ? escape ?) and user0_.enabled=?

带绑定

2021-02-17 20:29:35.214 TRACE 14700 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [VARCHAR] - [%admin%]
2021-02-17 20:29:35.214 TRACE 14700 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder      : binding parameter [2] as [CHAR] - [\]
2021-02-17 20:29:35.215 TRACE 14700 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder      : binding parameter [3] as [BOOLEAN] - [false]

老实说,我不是很清楚这是什么意思。我正在阅读它目前,但如果有人知道,我当然很感激,如果你分享你的知识或能给我的正确的方向。

我很乐意根据需要添加更多的信息。感谢任何找到答案的人!

共有1个答案

云季萌
2023-03-14

我不是Java专家,但我已经解决了这个问题,下面是如何解决的。

对于数据库中的每个用户,“Enabled”字段设置为TRUE。生成的示例启用了“false”

我相信这是因为布尔值中的NULL值为false。在JavaScript中就是这样的,JavaScript是我的主要语言。Java我还在学习,但我对这个解释很满意。也许对Java有更多了解和经验的人可以纠正我。

 类似资料:
  • 所以,我的问题在于title-crudepository方法返回一个空列表。我重写了Crud的方法,因为它返回的是iterable而不是list。 我尝试使用而不是(当时我没有覆盖方法),但得到了相同的结果。 我的代码: Event.java 城市JAVA 事件Controller.java 事件条目。html 我正在使用一个嵌入式H2数据库,其中有一个用于将数据填充到数据库中的文件(我没有文件,

  • 如果我跑: 我会得到一张空名单。我猜它与名称空间有关,但我不知道如何修复它。

  • 问题内容: 我在Android中有一个客户端应用程序,用于将文件发送到服务器。服务器使用Apache Commons FileUpload API来解析表单数据值。 该发送该请求: 服务器代码: 问题就在这里。返回的列表为空,我无法获取表单数据值。 问题答案: 如果您已经(隐式)预先解析了请求正文,则此位置将为空。HTTP请求正文只能被读取/解析 一次 (因为客户端仅发送一次,并且不会多次发送)。

  • 我对Spring编程是新手。我正在用Reactor/Webflux项目测试反应式编程。 数据库注册通过POST工作得很好。 我的模型: 我的存储库 我的用户服务

  • 我试图使用JPA findAll获取所有记录。如果我在终端中运行相同的查询,结果会得到一些行,但不是通过JPA。我在stackoverflow上尝试了其他答案,但都不起作用。我尝试添加公共getter和setter,尽管我假设这是通过注释完成的。 型号类别: 服务等级: 编辑:添加存储库代码:

  • 本文向大家介绍PowerShell函数一次返回多个返回值示例,包括了PowerShell函数一次返回多个返回值示例的使用技巧和注意事项,需要的朋友参考一下 本文介绍在自定义PowerShell函数时,如何让函数返回值,如何接收返回值,如何让不相干的内容不放到返回值数组中。 PowerShell函数体中的任何输出,一般来说,都会以返回值的形式返回给函数调用者。多个输出的内容是放到一个返回值数组中的。