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”。所以事后看来,映射是问题所在。
所以我正在创建一个简单的库存管理项目,但是,当我查询数据库 (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”。所以事后看来,映射是问题所在。