E 'possibile creare indici su unirsi tavolo utilizzando le annotazioni Hibernate e hbm2ddl?
-
19-09-2019 - |
Domanda
Ho un due entità in molti-a-molti. Hibernate crea una tabella di join per questa associazione se hbm2ddl è attivato. Tuttavia, dal momento che non ho un'entità per questa tabella, non posso applicare @Index annotazione. C'è un modo per dire letargo hbm2ddl per generare indici e chiave primaria sul tavolo aderire?
Soluzione
Una possibilità è quella di utilizzare banca dati ausiliari oggetti , ma si richiederebbe di passare da annotazioni APP in un file .hbm.xml
tradizionale.
Ecco un esempio:
<!-- 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>
Un'altra opzione è quella di mordere solo la pallottola e creare un'entità vera e propria per sostituire la tabella di aderire. Questo è, infatti, quello che ho fatto in una situazione simile.
Spero che questo aiuti.
Altri suggerimenti
Si potrebbe applicare indice su un'annotazione tavolo di raccolta. Per esempio:.
@javax.persistence.ElementCollection(fetch = javax.persistence.FetchType.LAZY)
@javax.persistence.CollectionTable(
name = "TheJoinTable",
indexes = {
@Index(name = "MyIndex", columnList = "Entity1ID")},
joinColumns = {
@JoinColumn(name = "TheJoinColumn")}
)