2017-06-11 8 views
0

So habe ich 2 Klassen: Spiel und Benutzer. Benutzer kann 1 oder mehr Spiele spielen, so ist es eine OneToMany Beziehung zwischen ihnen. Hier sind die Klassen.StackoverflowError JPA in OneToMany Beziehung

Und ich versuche, die Beziehung bidirektional zwischen den Klassen zu machen.

Spiel:

@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 

Benutzer:

@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; 
    } 
} 

Also, wenn der Benutzer spielt ein neues Spiel der folgende Methode, um die Benutzer in der Datenbank zu der Liste (hsqldb) und wir fügen das neue Spiel findet . Da die Beziehung bidirektional ist, setze ich den Benutzer auf jedes gespielte Spiel ... also das ist das, was das Problem verursacht. Kann ich etwas anderes reparieren?

@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; 
} 

ich diese Fehler erhalte:

java.lang.IllegalStateException: Cannot call sendError() after the response has been committed 

und stackoverflowerror

Antwort

0

ich es herausgefunden, dass das JSON das Problem war ..... Ich habe unendliche Rekursion mit dem JSON. Ich fügte dieses @JsonManagedReference and @JsonBackReference. hinzu und reparierte das Problem. Sie können die vollständige Antwort hier überprüfen. Danke!

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

Verwandte Themen