Проблема с Hibernate hbm2ddl, неправильно создающим уникальный индекс

У меня возникла серьезная проблема с 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;
}

Может ли кто-нибудь сказать мне, как предотвратить такое поведение?


person balteo    schedule 01.03.2013    source источник


Ответы (1)


Это совершенно логично - он работает именно так, как должен работать. Таблица advertisement_day_to_time_slots — это таблица соединения между Advertisement и DayToTimeSlot сущностями. Связь между этими объектами строится с помощью таблицы соединений, поскольку ассоциация является однонаправленной «один ко многим».

Эта таблица соединений имеет уникальное ограничение в столбце day_to_time_slot, поскольку каждый DayToTimeSlot может быть подключен только к одному объекту Рекламы. Инверсией OneToMany является ManyToOne. Одно объявление может быть связано со многими сущностями DayToTimeSlot, но одно DayToTimeSlot связано только с одним объявлением. Если такое ограничение нежелательно, связь @ManyToMany следует использовать вместо OneToMany.

person Mikko Maunu    schedule 01.03.2013
comment
Микко: ты прав, конечно. Большое спасибо. Извините за эту ошибку с моей стороны... - person balteo; 02.03.2013