私は2つのクラスを持っています:ゲームとユーザー。ユーザーは1つ以上のゲームをプレイできるので、それらの間の関係はOneToMany
です。ここにクラスがあります。OneToMany関係のStackoverflowError JPA
私は、クラス間の関係を双方向にしようとしています。
ゲーム:
@Entity
public class Game {
@Id
@Column(name = "GAME_NUMBER")
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long gameNumber;
private int playerScore;
private int NPCScore;
private Date datetime;
@ManyToOne
@JoinColumn(name="USER_ID")
private User user;
public Game() {}
public Game(int playerScore, int nPCScore, Date datetime) {
super();
this.playerScore = playerScore;
this.NPCScore = nPCScore;
this.datetime = datetime;
}
public User getUser() {
return user;
}
} + getters & setters for attributes
ユーザー:ユーザーが新しいゲームをプレイするとき
@Entity
public class User {
@Id
@Column(name = "USER_ID")
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long userId;
private String username;
private String password;
@OneToMany(mappedBy="user",cascade=CascadeType.ALL)
private List<Game> games;
@ElementCollection
private List<Date> startSessions;
public User() {}
public User(String username, String password, List<Game> games, List<Date> startSessions) {
super();
this.username = username;
this.password = password;
this.games = games;
this.startSessions = startSessions;
}
}
だから、以下の方法は、データベース内のユーザーを検索します(hsqldb
)、我々はリストに新しいゲームを追加。関係は双方向であるため、私は各ゲームのプレイにユーザーを設定します...これが問題の原因です。他の方法で修正することはできますか?私はこのエラーを受け付けております
@RequestMapping(value = "/game/play", method = RequestMethod.POST)
@ResponseBody
public User indexRequestPlay(@RequestParam String username, @RequestParam String password) {
User user = userRepository.findByUsernameAndPassword(username, password);
Random random = new Random();
int userScore = random.nextInt(5) + 1;
int npcScore = random.nextInt(5) + 1;
Date date = new Date();
List<Date> startSessions = user.getStartSessions();
startSessions.add(date);
user.setStartSessions(startSessions);
Game game = new Game(userScore, npcScore, date);
game.setUser(user);
List<Game> games = new ArrayList<Game>();
games.addAll(user.getGames());
games.add(game);
user.setGames(games);
userRepository.save(user);
return user;
}
:
java.lang.IllegalStateException: Cannot call sendError() after the response has been committed
とstackoverflowerror