¿Es posible crear índices de tabla de unión utilizando anotaciones de Hibernate y hbm2ddl?
-
19-09-2019 - |
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?
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")}
)