Pergunta

Eu tenho duas entidades em associação muitos-para-muitos. Hibernate cria uma tabela de associação para esta associação se hbm2ddl é ativado. No entanto, desde que eu não tenho uma entidade para esta tabela, não posso aplicar @Index anotação. Existe uma maneira de dizer hibernate hbm2ddl para gerar índices e chave primária na tabela de junção?

Foi útil?

Solução

Uma opção é usar banco de dados auxiliar objetos , mas exigiria que você mudar de anotações JPA para um arquivo .hbm.xml tradicional.

Aqui está um exemplo:

<!-- 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>

Outra opção é apenas morder a bala e criar uma entidade de pleno direito para substituir a tabela de junção. Este é na verdade o que eu fiz em uma situação similar.

Espero que isso ajude.

Outras dicas

Você pode aplicar índice em uma anotação coleção de tabela. Por exemplo:.

    @javax.persistence.ElementCollection(fetch = javax.persistence.FetchType.LAZY)
@javax.persistence.CollectionTable(
        name = "TheJoinTable",
        indexes = {
            @Index(name = "MyIndex", columnList = "Entity1ID")},
         joinColumns = {
            @JoinColumn(name = "TheJoinColumn")}
)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top