Domanda

Ho il seguente Hibernate Mapping, che deve essere mappato usando la tabella per la gerarchia di classi concrete:

<hibernate-mapping package='dao'>
    <meta attribute='class-description'></meta>
    <class name='PropertyDAO'>
        <id name='id' column='id_property'>
            <generator class='assigned'/>
        </id>
        <property name='address' column='address' type='string'/>
        <union-subclass name='HouseDAO' table='house'>
            <property name='noOfRooms' column='noOfRooms'/>
            <property name='totalArea' column='totalArea'/>
            <property name='price' column='price'/>
        </union-subclass>
        <union-subclass name='LandDAO' table='land'>
            <property name='area' column='area'/>
            <property name='unitPrice' column='unitPrice'/>
        </union-subclass>
    </class>
</hibernate-mapping>

Il che significa che nel database ho solo 2 tabelle:

  • casa (id_property (PK), indirizzo, noOfRooms, totalArea, prezzo)
  • terra (id_property (PK), indirizzo, area, unitPrice)

Per quanto ho capito, in questo caso gli ID devono essere generati esplicitamente prima di chiamare .save (), quindi la mia domanda è: Come posso creare una strategia per la generazione automatica degli ID, in modo che gli ID da la classe concreta forma un dominio continuo quando viene unita.

È stato utile?

Soluzione 3

La soluzione è creare un'altra tabella che memorizzi l'id successivo; questo valore deve essere modificato ogni volta che un utente desidera inserire una nuova entità. In questo modo, il dominio è continuo

Altri suggerimenti

IMHO il tuo modello nel DB è errato perché hai informazioni ridondanti su più tabelle correlate.

La tabella per classe concreta è un modello di ereditarietà che presenta problemi in fase di esecuzione poiché si può avere la situazione in cui si aggiorna l'indirizzo di Terra ma non di Casa mentre sono gli stessi (semanticamente). Iow: elimina questo modello e introduce la tabella per sottoclasse, quindi hai una tabella di base di proprietà con ID e indirizzo e due tabelle separate con un PK che è un FK per il pk della base di proprietà, uno è casa con i campi specifici della casa , l'altro è terra con i campi specifici della terra.

Questo ti darà il minor numero di problemi in quanto è il modo di convertire l'ereditarietà tra i tipi di entità in tabelle relazionali (vedi i libri di Nijssen / Halpin su NIAM / ORM)

Ho usato quanto segue con la sottoclasse unita

<key column="id"/>

Ciò dovrebbe fare in modo che le sottoclassi utilizzino gli ID dalla tabella delle proprietà poiché ciò dipende da esso. (il super) La colonna si riferisce alla colonna nella sottoclasse che è un riferimento esterno al super.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top