@ManyToMany не загружается
Есть три таблицы. Первая календарь с датами.
@Entity
@NamedEntityGraph(
name = "eventCalendar.events",
attributeNodes = @NamedAttributeNode("events"),
subgraphs = {
@NamedSubgraph(
name = "event-with-contacts-and-eventContents",
type = Event.class,
attributeNodes = { @NamedAttributeNode("contacts"),
@NamedAttributeNode("eventContents") })})
public class EventCalendar extends BaseEntity {
private Long day;
@Column(columnDefinition = "boolean default false")
private Boolean isActive;
@OneToMany(mappedBy = "eventCalendar",cascade = CascadeType.ALL)
private List<Event> events = new ArrayList<>();
}
На каждую дату может быть несколько событий.
@Entity
@NamedEntityGraph(name = "event-with-contacts-and-eventContents",
attributeNodes = { @NamedAttributeNode("contacts"), @NamedAttributeNode("eventContents") })
public class Event extends BaseEntity {
@OneToMany(mappedBy = "event",cascade = CascadeType.ALL)
private List<EventContent> eventContents = new ArrayList<>();
@ManyToOne
@JoinColumn(name = "event_calendar_id")
private EventCalendar eventCalendar;
@ManyToMany
private Set<Contact> contacts = new LinkedHashSet<>();
}
И у каждого события может быть много участников, как и один участник может быть в списке многих событий
@Entity
public class Contact extends BaseEntity {
private String surname;
private String name;
private String patronymic;
@ManyToMany
private Set<Event> events = new LinkedHashSet<>();
}
репозиторий для календаря
@Repository
public interface EventCalendarRepository extends BaseRepository<EventCalendar> {
@EntityGraph(value = "eventCalendar.events", type = EntityGraph.EntityGraphType.LOAD)
List<EventCalendar> findByDayIn(Long[] days);
}
Поле eventContents загружается, а contacts нет. Как поправить?
Ответы (1 шт):
Автор решения: Anton Charov
→ Ссылка
Нужно явно описать таблицу для связи многие ко многим, иначе hibernate создает две таблицы.
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "events_contacts",
joinColumns = @JoinColumn(name = "event_id"),
inverseJoinColumns = @JoinColumn(name = "contact_id"))
private Set<Contact> contacts = new LinkedHashSet<>();