所以这个问题的背景是:我创建了一个事件日历,该事件日历允许事件跨越多天。在我的数据库中,我有一个用于事件的表,并且有一个名为event_dates的表,它只是event_id和date。
要正确获取带有事件日期的行,请执行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;
}
在这里出现问题:
虽然数据库将返回每一行以及正确的日期(无重复的日期),
spring数据将第一行创建为具有第一个日期的实体,但是当它到达下一行时,它会看到该事件的ID与上一个实体相同,并且只是将该实体复制到数组,它从不检查日期对于该实体是否唯一。日期永远不会改变,但重要的是它确实如此,或者我的api返回了同一天一遍又一遍发生的事件(正确的重复次数,但是哈哈)。
因此spring的返回值是正确的条目数,但是每个实体的日期保持不变,因为它没有检查event_id和date字段对于添加到返回结果数组中的每个实体都是唯一的。>
我见过使用@UniqueConstraint
,但是问题是@UniqueConstraint
跨越两个表,而不是同一张表,并且我还没有找到任何示例来说明如何针对这种情况进行配置。
我就像95%的人,我只需要每个实体的日期都是唯一的!