mappedBy в спящем режиме определяется в соответствии с определением схемы или определяется логически? - PullRequest
0 голосов
/ 22 февраля 2012

У меня следующая ситуация:

Один пункт назначения может иметь несколько псевдонимов

Логически : я бы хотел, чтобы Destination был владельцем этих отношений, поскольку если бы не было места назначения, псевдоним не имел бы никакого значения.

Однако схема базы данных выглядит следующим образом:

Destination-Alias relationship

DestinationAlias ​​имеет idDestination в качестве внешнего ключа, и поэтому @JoinColumn в спящем аннотации будет на DestinationAlias:

Назначение:

@OneToMany(fetch=FetchType.LAZY, cascade={CascadeType.ALL}, mappedBy = "mainCity")
    public Set<DestinationAlias> getAliases() {
        return aliases;
    }

DestinationAlias:

@ManyToOne(fetch=FetchType.LAZY, cascade={CascadeType.ALL})
    @JoinColumn(name="IDDESTINATION", nullable=false)
    public Destination getMainCity() {
        return mainCity;
    }

Из этого определения DestinationAlias ​​является владельцем этого отношения, поскольку mappedBy является атрибутом класса Destination.

Требует ли hibernate того, чтобы я следовал database schema и помечал сущность как владельца отношений, или это может быть сделано по Logical причинам?

1 Ответ

0 голосов
/ 22 февраля 2012

Владение влияет на то, как hibernate будет моделировать базовые таблицы базы данных.Если вы опустите атрибут mappedBy, hibernate сгенерирует таблицу соединений (как для отношений MM) между Destination и DestinationAlias ​​вместо простого столбца соединения.Кроме этого, мне любопытно, что ваша настоящая проблема здесь.Это чисто косметическая проблема или для вас здесь есть функциональные проблемы?

РЕДАКТИРОВАТЬ: так как это кажется чисто косметической проблемой, я советую просто принять семантику Hibernate.Хотя я согласен с тем, что может показаться нелогичным, что Hibernate назвал бы DestinationAlias ​​«владельцем», это определенная номенклатура Hibernate.Он также не уникален и исходит из того, что «владелец» - это то место, где находится столбец соединения.

Не тратьте время на попытки заставить hibernate соответствовать вашим определениям, когда вам не нужно.

...