Как мне справиться с зависимостью между двумя сущностями? Я хочу иметь возможность получать игры для игрока, а также игроков для игры. В настоящее время я пытаюсь сделать это с @JsonIdentityInfo, но результат не удовлетворяет.
@Entity
@Table(name = "player", uniqueConstraints = { @UniqueConstraint(columnNames = "id") })
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id", scope = Player.class)
public class Player{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "games_admins", joinColumns = { @JoinColumn(name = "player_id") }, inverseJoinColumns = {
@JoinColumn(name = "game_id") })
private Set<Game> games;
@Entity
@Table(name = "game", uniqueConstraints = { @UniqueConstraint(columnNames = "id") })
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id", scope = Game.class)
public class Game{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToMany(mappedBy = "games")
private Set<Player> players;
Поэтому, когда я отправляю запрос GET, чтобы получить всех игроков, я хочу получить что-то подобное
[
{
"id": 1,
"name": "Player1",
"games": [
{
"id": 1,
"name": "game1",
"players": [1, 2, 3]
},
{
"id": 2,
"name": "game2",
"players": [1, 3]
},
{
"id": 3,
"name": "game3",
"players": [1, 2]
}
]
},
{
"id": 2,
"name": "Player2",
"games": [
{
"id": 1,
"name": "game1",
"players": [1, 2, 3]
},
{
"id": 3,
"name": "game3",
"players": [1, 2]
}
]
},
{
"id": 3,
"name": "Player3",
"games": [
{
"id": 1,
"name": "game1",
"players": [1, 2, 3]
},
{
"id": 2,
"name": "game2",
"players": [1, 3]
}
]
}
]
Поэтому, когда мы снова достигаем «игрока», мы не перечисляем игры, а их идентификаторы, чтобы избежать рекурсии. То же самое должно применяться к играм.
Но я получаю вот что:
[
{
"id": 1,
"name": "Player1",
"games": [
{
"id": 2,
"name": "game2",
"players": [
1,
{
"id": 3,
"name": "Player3",
"games": [
2,
{
"id": 1,
"name": "game1",
"players": [
{
"id": 2,
"name": "Player2",
"games": [
1,
{
"id": 3,
"name": "game3",
"players": [2, 1]
}
]
},
1,
3
]
}
]
}
]
},
1,
3
]
},
2,
3
]