无法将对象添加到列表。弹簧靴。蒙戈数据库



我不能在"游戏"列表中添加任何内容,我不明白为什么。一切都与MySQL工作得很好,但我不能将对象保存到列表游戏与MongoDB。"游戏"被成功创建并保存在集合中。非常感谢任何帮助。谢谢你!

import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.data.mongodb.core.mapping.Document;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
@Document(collection = "player")
public class Player {
@Id
private String playerId;
private String name;
private LocalDate registerDate;
@Transient
Double rate;
@JsonIgnore
@DBRef
private List<Game> games = new ArrayList<>();
//{games = new ArrayList<>();}
public Player(String name) {
this.name = name;
this.registerDate = LocalDate.now();
}
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.data.mongodb.core.mapping.Document;
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
@Document(collection = "game")
public class Game {
@Id
private String gameId;
private int dice1;
private int dice2;
@JsonIgnore
@DBRef(lazy=true)
private Player player;
private boolean win;
}

import cat.itacademy.barcelonactiva.kuzmina.ganna.s05.t02.n01.DiceGameS05T02N01MySQL.exceptions.HttpException;
import cat.itacademy.barcelonactiva.kuzmina.ganna.s05.t02.n01.DiceGameS05T02N01MySQL.model.domain.Game;
import cat.itacademy.barcelonactiva.kuzmina.ganna.s05.t02.n01.DiceGameS05T02N01MySQL.model.domain.Player;
import cat.itacademy.barcelonactiva.kuzmina.ganna.s05.t02.n01.DiceGameS05T02N01MySQL.model.repository.GameRepository;
import lombok.AllArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
@AllArgsConstructor
public class GameServiceImpl implements GameService{
private final GameRepository gameRepository;
private final PlayerService playerService;
private  final PlayGameServiceImpl playGameService;
@Override
public Game playGame(String playerId) {
if(playerService.getAllPlayers().isEmpty()){
throw new HttpException(HttpStatus.INSUFFICIENT_STORAGE,"There is no registered player");
}
Player player = playerService.findPlayerById(playerId);
if(player==null){
throw new HttpException(HttpStatus.NOT_FOUND,"Player with this id is not found");
}
Game gamePlayed = playGameService.play();
gamePlayed.setPlayer(player);
player.calculateRate();
playerService.saveGame(gamePlayed,playerId);
return gameRepository.save(gamePlayed);
}

playGameService中play方法的实现:

@Override
public Game play() {
int dice1 = getRandomNum();
int  dice2 = getRandomNum();
return Game.builder().dice1(dice1).dice2(dice2).win(getWin(dice1,dice2)).build();
}

PlayerServiceImpl:

@Override
public void saveGame(Game game, String playerId){
Optional<Player> player = playerRepository.findById(playerId);
player.get().getGames().add(game);
}

控制器:

@PostMapping("/{id}/games")
public ResponseEntity<?> playGame(@PathVariable String id) {
Game gameToSave;
try {
gameToSave = gameService.playGame(id);
} catch (HttpException ex) {
return ResponseEntity.status(ex.getStatus()).body(ex.getMessage());
}
return ResponseEntity.status(HttpStatus.CREATED).body(gameToSave);
}

感谢您的宝贵时间

似乎你没有像使用playerRepository.save()那样保存玩家信息。就像你为gamerrepository做的那样。

@Override
public void saveGame(Game game, String playerId){
Optional<Player> player = playerRepository.findById(playerId);
player.get().getGames().add(game);
playerRepository.save(player); // saving player information with new game data
}

最新更新