2010-02-09 1 views
2

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

ответ

0

Один из вариантов заключается в использовании auxiliary database objects, но для этого потребуется переключение с аннотаций 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> 

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

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

0

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

@javax.persistence.ElementCollection(fetch = javax.persistence.FetchType.LAZY) 
@javax.persistence.CollectionTable(
     name = "TheJoinTable", 
     indexes = { 
      @Index(name = "MyIndex", columnList = "Entity1ID")}, 
     joinColumns = { 
      @JoinColumn(name = "TheJoinColumn")} 
) 
Смежные вопросы