Pregunta

Tengo dos entidades en asociación muchos-a-muchos. Hibernate crea una tabla de unión para esta asociación si hbm2ddl se activa. Sin embargo, puesto que no tengo una entidad para esta tabla, no puedo aplicar @Index anotación. ¿Hay una manera de contar hibernación hbm2ddl para generar índices y clave primaria en la tabla de unión?

¿Fue útil?

Solución

Una opción es utilizar objetos de la base auxiliar , pero requeriría que cambiar de anotaciones JPA en un archivo .hbm.xml tradicional.

Aquí es un ejemplo:

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

Otra opción es simplemente morder la bala y crear una entidad de pleno derecho para reemplazar la tabla de unión. Esto es de hecho lo que he hecho en una situación similar.

Espero que esto ayude.

Otros consejos

Se podría aplicar un índice sobre la mesa de anotación colección. Por ejemplo:.

    @javax.persistence.ElementCollection(fetch = javax.persistence.FetchType.LAZY)
@javax.persistence.CollectionTable(
        name = "TheJoinTable",
        indexes = {
            @Index(name = "MyIndex", columnList = "Entity1ID")},
         joinColumns = {
            @JoinColumn(name = "TheJoinColumn")}
)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top