【问题标题】:Issue with Hibernate's hbm2ddl creating a unique index undulyHibernate 的 hbm2ddl 过度创建唯一索引的问题
【发布时间】:2013-02-16 07:58:16
【问题描述】:

我遇到了 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;
}

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

【问题讨论】:

    标签: mysql hibernate jpa hbm2ddl unique-index


    【解决方案1】:

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

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

    【讨论】:

    • Mikko:你当然是对的。非常感谢。很抱歉我犯了这个错误......
    猜你喜欢
    • 2018-06-19
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    相关资源
    最近更新 更多