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?

È stato utile?

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")}
)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top