Итак, история этой проблемы: я создал календарь событий, который позволяет событиям длиться несколько дней.В моей БД у меня есть таблица для события, и у меня есть таблица с именем event_dates, которая представляет собой только event_id и дату.
Чтобы получить строки правильно с датами события, я делаю INNER JOIN on EVENT_DATES (event_id)
Возвращение из БД правильное, строка содержит всю информацию о событии вместе со столбцом «дата», прикрепленным в конце.
Мой домен для класса событий:
@Data
@Entity
@Table(name="events")
@SecondaryTable(name = "event_date", pkJoinColumns=@PrimaryKeyJoinColumn(name="event_id", referencedColumnName="event_id"))
@RequiredArgsConstructor
public class Event {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="event_id")
private Long id;
private String eventTitle;
private String eventCategory;
private String eventType;
@Column(table="event_date", name="date", columnDefinition = "DATE", unique=true)
private LocalDate date;
@Column(table="event_date", name="event_date_id")
private Long eventDateId;
private boolean allDayEvent;
@Column(name = "start_time", columnDefinition = "TIME")
private LocalTime startTime;
@Column(name = "end_time", columnDefinition = "TIME")
private LocalTime endTime;
private String timezone;
private boolean onlineEvent;
private String city;
private String state;
private String country;
private String language;
private String description;
private boolean register;
private String registrationLink;
private boolean multiDay;
}
Здесь возникает проблема:
Пока БД возвращает каждую строку вместе с правильными датами (без повторяющихся дней),
весенние данные создают первую строку как сущность с первой датой, но затем, когда она попадает в следующую строку, она видит, что идентификатор события совпадает с предыдущей сущностью, и просто копируетэта сущность снова в массиве, она никогда не проверяет, является ли дата уникальной для этой сущности.Даты никогда не меняются, и важно, чтобы это происходило, или мой API возвращает события, происходящие снова и снова в один и тот же день (правильное количество дубликатов, однако, ха-ха).
Таким образом, возвращаемое значение из пружины - это правильное количество записей, но даты для каждого объекта остаются неизменными, потому что он не проверяет, являются ли поля event_id и date уникальными для каждого объекта, добавляемого в массив возвращаемых результатов..
Я видел использование @UniqueConstraint
, но проблема в том, что @UniqueConstraint
s охватывают две таблицы, а не одну и ту же таблицу, и я не нашел примеров, показывающих, как настроить ситуацию такого типа,
Я там на 95%, мне просто нужны даты, чтобы каждая сущность была уникальной!