findAll()
метод из JpaRepository
возвращает пустое значение, но правильное количество пустых значений
Я использую базу данных h2, и все работало нормально до некоторого неизвестного момента.Simple GET на http://localhost:8080/users
возвращает {} x количество пользователей, ранее добавленных в базу данных.Я попытался реализовать метод, который возвращал бы id, основанный на имени пользователя, и это прекрасно работает.
Вот мой User.java
:
@Entity
@Table(name = "Users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "username")
@NotBlank(message = "Username is mandatory")
@Size(min = 1, max = 20, message = "Username must be less than 20 characters long")
private String username;
@Column(name = "balance")
private Double balance = 0.0;
Long getId() {
return id;
}
void setId(Long id) {
this.id = id;
}
String getUsername() {
return username;
}
void setUsername(String username) {
this.username = username;
}
Double getBalance() {
return balance;
}
void setBalance(Double balance) {
this.balance = balance;
}
}
Вот UserService
, который реализует методы из IUserService
:
@Service
public class UserService implements IUserService {
@Autowired
private UserRepository repository;
@Override
public void createNewUser(User user) {
repository.save(user);
}
@Override
public List<User> findAll() {
return repository.findAll();
}
@Override
public Long findByUsername(String username) {
return repository.findByUsername(username);
}
@Override
public User findById(Long id) {
return repository.findById(id).orElse(null);
}
@Override
public boolean checkIfUsernameIsTaken(User user) {
return repository.findByUsername(user.getUsername()) != null;
}
@Override
public void deleteUser(Long id) {
repository.deleteById(id);
}
@Override
public void updateBalance(Long id, Double balance) {
repository.updateBalance(id, balance);
}
}
Я пробовал с аннотациями @Column
и без них, и, похоже, он ничего не делает.
Вывод, полученный от Почтальона, будет [{}], если ядобавил только одного пользователя через createNewuser()
, [{}, {}], если я добавил двух пользователей и так далее.Я не понимаю, что сломало метод findAll()
.
PS updateBalance()
тоже не работает, но это уже в другой раз.
Редактировать: какой-то ov, который вы просили UserController
:
@RestController
public class UserController {
@Autowired
IUserService userService;
@GetMapping("/users")
public List<User> findUsers() {
return userService.findAll();
}
@GetMapping("/users/{id}")
public User findUserById(@PathVariable Long id) {
return userService.findById(id);
}
@PostMapping("/users")
public ResponseEntity<Object> createUser(@RequestBody User user) {
if (userService.checkIfUsernameIsTaken(user)) {
Map<String, Object> response = new HashMap<>();
response.put("status", HttpStatus.NOT_ACCEPTABLE);
response.put("errors", "Username is already taken");
response.put("timestamp", new Date());
return new ResponseEntity<>(response, HttpStatus.BAD_REQUEST);
} else {
userService.createNewUser(user);
User currentUser = userService.findById(userService.findByUsername(user.getUsername()));
Map<String, Object> response = new HashMap<>();
response.put("id", currentUser.getId());
response.put("username", currentUser.getUsername());
response.put("balance", currentUser.getBalance());
return new ResponseEntity<>(response, HttpStatus.OK);
}
}
@DeleteMapping("/users/{id}")
public void deleteUser(@PathVariable Long id) {
userService.deleteUser(id);
}
@PutMapping("/users/{id}/{balance}")
public void updateBalance(@PathVariable Long id, @PathVariable Double balance) {
userService.updateBalance(id, balance);
}
}
и UserRepository
:
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
@Query("SELECT id FROM User WHERE username = ?1")
Long findByUsername(String username);
@Transactional
@Modifying
@Query("UPDATE User SET balance = ?2 WHERE id = ?1")
void updateBalance(Long id, Double balance);
}
Мои проблемы впервые появились (или я так думаю) после того, как я выполнил запрос на обновление, но я попытался запустить версию, гдеЯ знаю, что он работал на другом компьютере, но он не работал.