Spring数据未返回多个唯一行的唯一实体

时间:2018-12-18 15:25:31

标签: java spring hibernate spring-data-jpa spring-data-rest

所以这个问题的背景是:我创建了一个事件日历,该事件日历允许事件跨越多天。在我的数据库中,我有一个用于事件的表,并且有一个名为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%的人,我只需要每个实体的日期都是唯一的!

0 个答案:

没有答案