2017-06-11 31 views
0

私は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

答えて

0

私はJSONで無限再帰を得た..... JSONが問題だったことそれを考え出しました。私はこれに@JsonManagedReference and @JsonBackReference.を追加し、問題を修正しました。ここで完全な答えを確認することができます。どうも!

https://stackoverflow.com/a/18288939/7947794