У меня есть два класса: MenuItem.java
и Tag.java
.Я использую реализацию JPA Hibernate и использую PagingAndSortingRepository
.После создания нескольких фиктивных элементов MenuItem и тегов они отображаются в моей локальной базе данных и могут быть доступны с помощью: localhost: 8080 / api / menuItems или localhost: 8080 / api / tags.Кроме того, как описано в моих комментариях к файлам ниже, между этими двумя объектами существует отношение ManyToMany
, и в моей базе данных также создается таблица Menu_Items_Tags с соответствующими записями.
ПроблемаЯ сталкиваюсь с тем, что каждый раз, когда я пытаюсь получить доступ к списку тегов данного элемента меню, например, через: localhost: 8080 / api / menuItems / 1 /, я получаю 500 error
и дополнительно получаю повторяющийся код ошибки, подобный этому:
: HHH000100: Fail-safe cleanup (collections) : org.hibernate.engine.loading.internal.CollectionLoadContext@726b0462<rs=HikariProxyResultSet@1877641821 wrapping Result set representing update count of 6>
Есть ли что-то, что я делаю неправильно, пытаясь запросить теги элемента MenuItem или неправильно настраиваю свои отношения @ManyToMany?
MenuItem.java:
@Data
@Entity
public class MenuItem implements Serializable {
private static final long serialVersionUID = 1132661429342356177L;
public MenuItem() {
}
public MenuItem(String name, Double price, Integer inventory, String description, Set<Tag> tags) {
this.name = name;
this.price = price;
this.inventory = inventory;
this.description = description;
this.tags = tags;
}
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Long id;
@Column(name = "name", nullable = false, unique = true)
private String name;
@Column(name = "price", nullable = false)
private Double price;
@Column(name = "inventory", nullable = false)
private Integer inventory;
@Column(name = "description", nullable = false)
private String description;
@OneToMany(mappedBy = "menuItem")
private Set<Order> orders;
@ManyToMany
@JoinTable(
name="menu_item_tags",
joinColumns = @JoinColumn(name = "menu_item_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "tag_id", referencedColumnName = "id"))
@JsonManagedReference
private Set<Tag> tags;
}
Tag.java:
@Data
@Entity
public class Tag implements Serializable {
private static final long serialVersionUID = 1132661429342356176L;
public Tag() {
}
public Tag(String name) {
this.name = name;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name", unique = true)
private String name;
// @JsonIgnore
@ManyToMany(mappedBy = "tags")
@JsonBackReference
private Set<MenuItem> menuItems;
}