Можно ли создавать индексы в таблице соединений с помощью аннотаций Hibernate и hbm2ddl? - PullRequest
2 голосов
/ 09 февраля 2010

У меня есть две сущности в ассоциации «многие ко многим». Hibernate создает таблицу соединений для этой ассоциации, если активирован hbm2ddl. Однако, поскольку у меня нет объекта для этой таблицы, я не могу применить аннотацию @Index. Есть ли способ сообщить hibernate hbm2ddl для генерации индексов и первичного ключа в таблице соединений?

Ответы [ 2 ]

0 голосов
/ 14 июля 2017

Вы можете применить индекс к аннотации таблицы сбора.Например:

    @javax.persistence.ElementCollection(fetch = javax.persistence.FetchType.LAZY)
@javax.persistence.CollectionTable(
        name = "TheJoinTable",
        indexes = {
            @Index(name = "MyIndex", columnList = "Entity1ID")},
         joinColumns = {
            @JoinColumn(name = "TheJoinColumn")}
)
0 голосов
/ 11 февраля 2010

Один из вариантов - использовать вспомогательные объекты базы данных , но для этого потребуется переключиться с аннотаций JPA на традиционный .hbm.xml файл.

Вот пример:

<!-- class mapping: -->
<class name="Entity1" table="Entity1">

  <!-- insert other mappings here -->

  <!-- this class's half of the many-to-many relationship: -->
  <set name="Entity2s" table="TheJoinTable">
    <key column="Entity1ID" />
    <many-to-many class="Entity2" column="Entity2ID" />
  </set>
</class>

<!-- auxiliary object: -->
<database-object>
  <create>CREATE INDEX MyIndex ON TheJoinTable(Entity1ID)</create>
</database-object>

Другой вариант - просто прикусить пулю и создать полноценную сущность для замены таблицы соединения. На самом деле это то, что я сделал в подобной ситуации.

Надеюсь, это поможет.

...