У меня есть два объекта в ассоциации "многие ко многим". Hibernate создает таблицу соединений для этой ассоциации, если hbm2ddl активирован. Однако, поскольку у меня нет объекта для этой таблицы, я не могу применить аннотацию @Index. Есть ли способ заставить hibernate hbm2ddl генерировать индексы и первичный ключ в таблице соединений?
Можно ли создавать индексы в таблице соединений, используя аннотации Hibernate и hbm2ddl?
Ответы (2)
Один из вариантов — использовать вспомогательный объекты базы данных, но для этого вам потребуется переключиться с аннотаций 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>
Другой вариант — просто стиснуть зубы и создать полноценную сущность для замены таблицы соединений. Собственно, это я и сделал в похожей ситуации.
Надеюсь это поможет.
person
Matt Solnit
schedule
10.02.2010
Вы можете применить индекс к аннотации таблицы коллекции. Например.:
@javax.persistence.ElementCollection(fetch = javax.persistence.FetchType.LAZY)
@javax.persistence.CollectionTable(
name = "TheJoinTable",
indexes = {
@Index(name = "MyIndex", columnList = "Entity1ID")},
joinColumns = {
@JoinColumn(name = "TheJoinColumn")}
)
person
T Efron
schedule
14.07.2017