JpaRepository .findAll 方法 returns 空值并通过邮递员重复列表

JpaRepository .findAll method returns null values and reapeating list via postman

所以我正在创建一个简单的库存管理项目,但是,当我查询数据库 (MySQL) 时,.findall() 方法 returns 第一行多次和一些列数据是当数据明显存在时为 null。请注意,我也在使用 Lombok。

除了返回同一行之外,每次查询 运行 时都会创建 3 个新列。 我觉得这可能是从实体字段到数据库列的映射问题,但对我来说一切似乎都是数学?

如果需要,可以提供更多信息。

实体

@Entity
@Data
//@NoArgsConstructor
@Table(name = "users")
public class UserModel {

    @Id
    @GeneratedValue
    private Long ID;
    @Column(name = "userId", nullable = false)
    private Long userId;

    @Column(name = "FirstName", nullable = false)
    private String FirstName;
    @Column(name = "LastName", nullable = false)
    private String LastName;
    @Column(name = "Address", nullable = false)
    private String Address;
    @Column(name = "Mobile", nullable = false)
    private String Mobile;
    @Column(name = "Email", nullable = false)
    private String Email;
    @Column(name = "LastLogin", nullable = false)
    private Date LastLogin;
    @Column(name = "LastUpdated", nullable = false)
    private Date LastUpdated;
}

用户服务

@Override
public List<UserModel> getAllUsers() {
    return userRepo.findAll();
}

控制器

 @GetMapping("/getAll")
public ResponseEntity<List<UserModel>> getallUsers(){
    List<UserModel> userModels = (List<UserModel>) userService.getAllUsers();
    return new ResponseEntity<List<UserModel>>(userModels, HttpStatus.OK);
}

如果 JpaRepository#findAll 的默认实现失败(无论出于何种原因),请尝试自己的:

@Repository
public interface UserModelRepository extends JpaRepository<UserModel, Long> {

    @Override
    @Query("SELECT um FROM UserModel um")
    List<UserModel> findAll();

}

注意:此示例中的查询与 JPA 默认生成的查询相同。它应该根据要求实际覆盖。

此外,无需在您的控制器中投射。 getAllUsers() 方法已经 returns 一个 List<UserModel>.

感谢您的回答,非常感谢,并会给我更多的角度,以便在以后的调试中牢记。

我最终解决的方法是将 table 列名称更新为蛇形,即“FirstName”更改为“first_name”。所以事后看来,映射是问题所在。