У меня есть небольшой спортивный проект, в который я могу добавить пользователя, команду, игроков и игроков Stats et c. У меня проблема с моделью игрока. В основном, когда я пытаюсь добавить новую строку данных, она просто обновляет мою существующую, хотя я использую аннотацию @ManyToOne на модели.
Поэтому, когда я открываю страницу статистики для игрока, я ожидаю, что быть в состоянии увидеть несколько экземпляров, потому что я хотел бы, чтобы в каждой игре, в которую они играют, была строка.
Спасибо
1. Модель игрока
@Data
@Entity
@Table(name="User_Player")
public class Player implements Serializable {
@OneToOne
private User user;
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Long id;
private String playerName;
private String dob;
private String hometown;
private String weight;
private String height;
private Position position;
2. Контроллер игрока
@Slf4j
@Controller
@SessionAttributes("Player")
public class PlayerController {
private PlayerRepository playerRepository;
public PlayerController(PlayerRepository playerRepository) {this.playerRepository =
playerRepository;}
@Autowired
PlayerRepository service;
@GetMapping("/player")
public String displayPlayer(@PageableDefault(size = 10, sort = "playerName") Pageable
pageable,
Model model) {
Page<Player> page = playerRepository.findAll(pageable);
List<Sort.Order> sortOrders = page.getSort().stream().collect(Collectors.toList());
if (sortOrders.size() > 0) {
Sort.Order order = sortOrders.get(0);
model.addAttribute("sortProperty", order.getProperty());
model.addAttribute("sortDesc", order.getDirection() == Sort.Direction.DESC);
}
model.addAttribute("page", page);
return "player";
}
@GetMapping("/addPlayer")
public String showSignUpFormPlayer(User user) {
return "addPlayer";
}
@PostMapping("/addPlayer")
public String processPlayer(@Valid Player player, BindingResult result, SessionStatus
sessionStatus,
@AuthenticationPrincipal User user, Model model) {
if (result.hasErrors()) {
return "addPlayer";
}
player.setUser(user);
service.save(player);
model.addAttribute("player", service.findAll());
return "redirect:/player";
}
@GetMapping("/editPlayer/{id}")
public String showUpdatePlayerForm (@PathVariable("id") long id, Model model){
Player player = service.findAllById(id);
model.addAttribute("player", player);
return "editPlayer";
}
@PostMapping("/updatePlayer/{id}")
public String updatePlayer ( @PathVariable("id") long id, @Valid Player player,
BindingResult result, Model model){
if (result.hasErrors()) {
player.setId(id);
return "editPlayer";
}
service.save(player);
model.addAttribute("player", service.findAll());
return "redirect:/player";
}
3. Модель игрока Stats
public class PlayerStats implements Serializable {
@ManyToOne
private Player player;
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Long id;
private int td;
private int rushYards;
private int recYards;
private int returnYards;
private int throwingYards;
private int throwAttenpts;
private int throwSuccess;
private int receptions;
private int rushTD;
private int recTD;
private int fumbles;
private int fumblesRecovered;
private int forcedFumbles;
private int sacks;
private int puntsBlocked;
private int fgScored;
private int fgMissed;
private int punts;
private int tackle;
4. Контроллер статистики игрока
@Slf4j
@Controller
@SessionAttributes("PlayerStats")
public class PlayerStatsController {
private PlayerStatsRepository playerStatsRepository;
public PlayerStatsController(PlayerStatsRepository playerStatsRepository) {
this.playerStatsRepository = playerStatsRepository;}
@Autowired
PlayerStatsRepository service;
@GetMapping("/addPlayerStats/{id}")
public String showSignUpFormPlayer1(Player player) {
return "addPlayerStats";
}
@PostMapping("/addPlayerStats/{id}")
public String processPlayer1(@Valid PlayerStats playerStats, BindingResult result,
SessionStatus sessionStatus,
Player player, Model model) {
if (result.hasErrors()) {
return "player";
}
playerStats.setPlayer(player);
service.save(playerStats);
model.addAttribute("playerStats", service.findAll());
return "redirect:/player";
}
@GetMapping("/editPlayerStats/{id}")
public String showUpdateFixturesForm (@PathVariable("id") long id, Model model){
PlayerStats playerStats = service.findAllById(id);
model.addAttribute("playerStats", playerStats);
return "editPlayerStats";
}
@PostMapping("/editPlayerStats/{id}")
public String processPlayer1d(@Valid PlayerStats playerStats, BindingResult result,
SessionStatus sessionStatus,
Player player, Model model) {
if (result.hasErrors()) {
return "player";
}
playerStats.setPlayer(player);
service.save(playerStats);
model.addAttribute("playerStats", service.findAll());
return "redirect:/player";
}
//PlayerStats
@GetMapping("/PlayerStats/{id}")
public String showUpdatePlayerForm3 (@PathVariable("id") long id, Model model){
PlayerStats playerStats = service.findAllById(id);
model.addAttribute("playerStats", playerStats);
return "playerStats";
}