#java #mysql #spring #hibernate #spring-data-jpa
#java #mysql #spring #спящий режим #spring-data-jpa
Вопрос:
Я пытаюсь создать API, который имеет отношение «многие ко многим».
JSON, который я пытаюсь вывести, выглядит следующим образом.
[
{
"id": 12,
"firstname": "asdfghjkl ",
"surname": "asda",
"techniqueSet": [
{
"id": 0,
"techniqueName": "java",
},
{
"id": 1,
"techniqueName": "C#",
}
]
},
{
"id": 49,
"firstname": "asc",
"surname": "as",
"techniqueSet": []
},
{
"id": 90,
"firstname": "JACOB",
"surname": "LOL",
"techniqueSet": [
{
"id": 0,
"techniqueName": "Python",
},
{
"id": 1,
"techniqueName": "Haskell",
}
]
},
{
"id": 92,
"firstname": "Omar",
"surname": "LOL",
"techniqueSet": []
}
]
Тем не менее, я получаю следующее.
[
{
"id": 12,
"firstname": "asdfghjkl ",
"surname": "asda",
"techniqueSet": [
{
"id": 0,
"techniqueName": "Java",
"playersSet": [
12
]
},
{
"id": 1,
"techniqueName": "C#",
"playersSet": [
12,
{
"id": 90,
"firstname": "Jacob",
"surname": "LOL",
"techniqueSet": [
1,
{
"id": 2,
"techniqueName": "Python",
"playersSet": [
12,
90
]
},
{
"id": 3,
"techniqueName": "Haskell",
"playersSet": [
90
]
}
]
}
]
},
2
]
},
{
"id": 49,
"firstname": "asc",
"surname": "as",
"techniqueSet": []
},
{
"id": 90,
"firstname": "LOL",
"surname": "LOL",
"techniqueSet": []
},
91,
{
"id": 92,
"firstname": "Omar",
"surname": "LOL",
"techniqueSet": []
}
]
Мои Java следующие объекты
@Entity
@Table(name = "players")
@EntityListeners(AuditingEntityListener.class)
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "id")
public class Players {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="player_id")
private int id;
private String firstname;
private String surname;
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(
name = "able_to_use",
joinColumns = {@JoinColumn(name = "player_id", referencedColumnName = "player_id")},
inverseJoinColumns = {@JoinColumn(name = "technique_id", referencedColumnName = "id")}
)
private List<Technique> techniqueSet ;
//Getters and setters
Моя вторая сущность
@Entity
@Table(name = "technique")
@EntityListeners(AuditingEntityListener.class)
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "id")
public class Technique {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name = "technique_name")
private String techniqueName;
@ManyToMany(mappedBy = "techniqueSet", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<Players> playersSet ;
//Getters and Setter
Не могли бы вы помочь? Я новичок в JPA framework. Я думаю, что ошибка может заключаться в том, как соединение упоминается в каждом объекте.
Ответ №1:
Вы должны либо создать playersSet
свойство в Technique
классе transient
, либо использовать @JsonIgnore
.
Здесь происходит рекурсивная сериализация. Сначала сериализуется проигрыватель, затем он переходит к классу Technique, но в классе Technique также есть игроки в своей области. Так что это также будет сериализовано (снова).
Для получения дополнительной информации о аннотации Джексона прочитайте это простое вступление
Для получения дополнительной информации о переходных процессах в Java прочитайте эту статью
Комментарии:
1. проблема, с которой я сталкиваюсь сейчас. кажется, что если в наборе методов уже есть значение, он не будет печатать JSON снова, если, допустим, другому игроку нужно то же значение. Вы знаете, как это исправить?