【问题标题】:findAll() returns nullfindAll() 返回 null
【发布时间】:2021-06-15 22:33:43
【问题描述】:

我想通过使用方法findAll() 获取表users 中所有值的列表。

这是我尝试过的:

User.java

package ch.concertopro.webshopanalyser.entity;

import javax.persistence.*;

@Entity(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String name;
    @Column(unique = true, nullable = false)
    private String email;
    private String dob;


    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getDob() {
        return dob;
    }

    public void setDob(String dob) {
        this.dob = dob;
    }
}

IUserDao.java

package ch.concertopro.webshopanalyser.dao;

import ch.concertopro.webshopanalyser.entity.User;
import org.springframework.data.repository.CrudRepository;

public interface IUserDao extends CrudRepository<User, Integer> {

}

UserRepository.java

Intellij 生成的代码:

package ch.concertopro.webshopanalyser.repository;

import ch.concertopro.webshopanalyser.dao.IUserDao;
import ch.concertopro.webshopanalyser.entity.User;
import org.springframework.stereotype.Repository;

import java.util.Optional;

@Repository
public class UserRepository implements IUserDao {


    @Override
    public <S extends User> S save(S s) {
        return null;
    }

    @Override
    public <S extends User> Iterable<S> saveAll(Iterable<S> iterable) {
        return null;
    }

    @Override
    public Optional<User> findById(Integer integer) {
        return Optional.empty();
    }

    @Override
    public boolean existsById(Integer integer) {
        return false;
    }

    @Override
    public Iterable<User> findAll() {
        return null;
    }

    @Override
    public Iterable<User> findAllById(Iterable<Integer> iterable) {
        return null;
    }

    @Override
    public long count() {
        return 0;
    }

    @Override
    public void deleteById(Integer integer) {

    }

    @Override
    public void delete(User user) {

    }

    @Override
    public void deleteAll(Iterable<? extends User> iterable) {

    }

    @Override
    public void deleteAll() {

    }
}

UserController.java

package ch.concertopro.webshopanalyser.controller;

import ch.concertopro.webshopanalyser.repository.UserRepository;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class UserController {
    private final UserRepository userRepository;

    public UserController(UserRepository userRepository) {
        this.userRepository = userRepository;
    }


    @RequestMapping("user")
    public void getUser() {
        System.out.println(userRepository.findAll());
    }
}

我得到的输出总是null。为什么?

【问题讨论】:

  • public Iterable&lt;User&gt; findAll() { return null; } 不知道你还期待什么......
  • 好吧,您覆盖了 findAll() 并将返回类型更改为 null 。就是这样。
  • 为什么要自己实现IUserDao
  • @FedericoklezCulloca 该方法已由 Intellij 生成。如果我删除该方法,我会得到错误 UserRepository is not abstract and does not override abstract method findAll().
  • @Proseller spring 应该自己生成存储库interfaces,你不必自己实现它,所以只需删除你的UserRepository

标签: java spring-boot


【解决方案1】:
@Table(name = "users")
@Entity
public class User {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;

private String name;

@Column(unique = true, nullable = false)
private String email;

private String dob;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getDob() {
    return dob;
}

public void setDob(String dob) {
    this.dob = dob;
}
}

您必须像这样更改您的用户类。您需要使用 @Table 注释描述您的表名

【讨论】:

    【解决方案2】:

    保持

    @Repository 
    public interface IUserDao extends CrudRepository<User, Integer> {
    
    }
    

    删除UserRepository类,它的实现将由spring-data-jpa提供。

    访问:

    @Autowired
    private IUserDao repo;
    
    repo.findAll();
    

    【讨论】:

      猜你喜欢
      • 2014-08-07
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-20
      • 2019-08-22
      • 2021-09-27
      • 2018-12-15
      相关资源
      最近更新 更多