@OneToMany без обратной связи и без объединяющей таблицы?

Это - подобная проблема для "Спящего режима @OneToMany без отдельной объединяющей таблицы", в этом мне нужны @OneToMany отношения без объединяющей таблицы. Однако я также хотел бы не определить обратную связь. Удаление инверсии, кажется, приводит к объединяющей таблице, автоматически сгенерированной... там обходное решение для этого?

34
задан Community 23 May 2017 в 11:46
поделиться

2 ответа

в JPA 2.0+ вы можете использовать @joincolumn как способ избежать генерировать присоединенный стол.

Попробуйте.

@OneToMany
@JoinColumn(name="COLUMN_NAME")

Обновление

Информация, представленная выше, была извлечена из EJB 3.0 O'Reilly Cooke (ищите аннотацию @joincolumn, ссылки на столбец Customer_id в телефонной таблице). Тем не менее, обычная спецификация JPA 1.0 не поддерживает эту функцию. То, что он говорит, это

однонаправленные отношения однозначные отношения могут быть реализованы с использованием однозначных сопоставлений внешних ключей, такая поддержка не требуется в этом выпуске. Приложения, которые хотят использовать стратегию отображения внешних ключей для однозначных отношений , должны делать эти отношения двунаправленными для обеспечения портативности

, так что в 1.0 это специальная поставщика (и это Имеет смысл, автор работает на jboss - красная шляпа, поднимающаяся за гибернатом)

, но , но поддерживается реализацией JPA 2.0

, если присоединение предназначено для однонаправленного онообразования OneTomany, используя стратегию отображения внешних ключей, Внешний ключ находится в таблице целевой организации .

52
ответ дан 27 November 2019 в 16:38
поделиться

Спецификация JPA 1.0 НЕ поддерживает однонаправленное отображение OneToMany без таблицы соединения .

А использование JoinColumn на OneToMany запрещено в стандарте JPA 1.0 (только на OneToOne , ] ManyToOne или ManyToMany ). Хотя это в JPA 2.0.

Из спецификации JPA 1.0:

2.1.8.5.1 Однонаправленные отношения OneToMany

Применяются следующие значения по умолчанию для сопоставления:

Объект A отображается в таблицу с именем A . Сущность B сопоставлена ​​с таблицей названный B . Есть соединительный стол с именем A_B (имя владельца первый). В этой соединительной таблице есть два столбцы внешнего ключа. Один внешний ключ столбец ссылается на таблицу A и имеет тот же тип, что и первичный ключ таблицы A . Имя этого внешнего ключа столбец формируется как конкатенация из следующего: название юридического лица А; "_"; имя первичного ключа столбец в таблице A . Другой иностранный ключевой столбец относится к таблице B и имеет того же типа, что и первичный ключ таблица B и есть уникальный ключ ограничение на это. Имя этого столбец внешнего ключа формируется как конкатенация следующего: имя свойства отношения или поле сущности A; "_"; имя столбец первичного ключа в таблице B .

Подводя итог, можно сказать, что если вам не нужна таблица соединений (и полная поддержка чтения / записи), но при этом она должна быть совместимой с JPA, сделайте ассоциацию двунаправленной (со стороной , обратной ).

В приведенной ниже ссылке на вики-книгу обсуждается трюк (сопоставление целевой таблицы с таблицей соединения), позволяющий «обойти» проблему, но это работает только для чтения, запись не будет работать.

Ссылки

16
ответ дан 27 November 2019 в 16:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: