3

我遇到了 Hibernate 的 hbm2ddl 和 MySQL 的一个严重问题:Hibernate 系统地为我的 OneToMany 关联的一个字段创建了一个唯一索引,如下所示:

屏幕截图

请注意,选中UQ框以查找day_to_time_slots没有任何意义的字段...

这是Advertisement实体中的关系:

@OneToMany
private List<DayToTimeSlot> dayToTimeSlots;

这是DayToTimeSlot实体:

@RooJavaBean
@RooToString
@RooEquals
@RooJpaEntity
@Entity
public class DayToTimeSlot {

    @NotNull(groups = { Default.class, Validation.AdvertisementCreation.class })
    @Enumerated
    private Day day;

    @NotNull(groups = { Default.class, Validation.AdvertisementCreation.class })
    @Enumerated
    private TimeSlot timeSlot;
}

谁能告诉我如何防止这种行为?

4

1 回答 1

3

这是完全有道理的——它完全按照它应该的方式工作。表是实体之间的advertisement_day_to_time_slots连接表。这些实体之间的关系是通过连接表建立的,因为关联是单向的一对多。AdvertisementDayToTimeSlot

此连接表在 day_to_time_slot 列中确实具有唯一约束,因为每个 DayToTimeSlot 只能连接到一个广告实体。OneToMany 的逆是ManyToOne。一个广告可以连接到多个 DayToTimeSlot 实体,但一个 DayToTimeSlot 仅与一个广告相关联。如果这种限制不是首选,则应使用@ManyToMany关联而不是 OneToMany。

于 2013-03-01T19:06:17.920 回答