Domanda

Sto cercando di progettare un piuttosto semplice app e sto ottenendo me stesso un po 'confuso con la definizione di Hibernate di entità e il valore degli oggetti (come definiti nel capitolo 4 della Java Persistence con Hibernate).

Quello che ho è un app con i clienti, i quali possono effettuare ordini (uno a molti). Ognuno di questi ordini ha molte linee d'ordine (anche uno a molti). Ora, penso che i clienti hanno di identità (codice cliente) e così fanno gli ordini (numeri d'ordine) in modo che siano quindi oggetti entità? La mia confusione arriva con le linee d'ordine.

Una linea di ordine ha la quantità, il numero di prodotto e di prezzo. Una linea ordine non può esistere senza il suo ordine e non ha identità propria, quindi lo vedo come un oggetto di valore. Ma non posso fare linea ordine una parte della tabella ordine come c'è uno a molti tra un ordine e le sue linee di ordine. Come fanno uno a molti rapporti di lavoro con la definizione di un oggetto di valore? Dal libro Hibernate:

  

"Un oggetto di tipo valore non ha identità del database;. Appartiene a un'istanza dell'impresa e del suo stato persistente è incorporato nella riga della tabella dell'entità possedere tipi di valore non hanno identificatori o proprietà identificatore"

Se qualcuno può chiarire la mia confusione ho realmente lo apprezzerei:)

È stato utile?

Soluzione

la documentazione di Hibernate fa una distinzione tra Tipo entità e Valore Tipo , non il valore oggetto.

  
      
  • Oggetto di Tipo entità: ha una propria identità di database
  •   
  • Oggetto di Tipo valore: appartiene ad un soggetto, e il suo stato persistente è incorporato nella riga della tabella del soggetto possessore. I tipi di valore non hanno identificatori o proprietà identificatore.
  •   

Per quanto posso ricordare, il libro utilizza un campione con un address rappresentato come una singola stringa e un oggetto user, che contiene una stringa di indirizzo:

  • implementato come un tipo di valore (che tipicamente significa una colonna nella stessa tabella a livello di database), se l'utente viene eliminato, allora lo è il suo indirizzo. L'indirizzo non può vivere senza che l'utente e non può essere condivisa.

  • Implementato come un tipo di entità (che probabilmente significa utilizzare una tabella separata), esisterebbero gli indirizzi di per sé senza che l'utente e due gli utenti sarebbero in grado di condividere lo stesso indirizzo.

Nel tuo caso, una riga d'ordine non appartiene a un ordine, il suo stato persistente non è incorporato nella riga ordine (non ha senso), che ha una propria identità (fatta del orderId e productId) . riga d'ordine non è sicuramente un tipo di valore, si tratta di un tipo di entità.

In realtà, non appena si sta pensando in termini di associazioni (uno-a-uno, uno-a-molti, ecc), si sono di sicuro le entità che manipolano.

Altri suggerimenti

Credo che quello che hai è una domanda ORM piuttosto generico.

È citato " Una linea ordine non può esistere senza il suo ordine e non ha identità propria ".
Beh, anche se OrderLine non può esistere con un Ordine, non significa che non può avere un'identità.

Prendete il vostro entità Order, non può esiste senza un cliente, ma è già considerato come un'Entità, sì?

Quindi, ecco un suggerimento per le entità:
- Cliente (può avere nessuno o più entità Order)
- Order (può avere una o più entità OrderLine)
- OrderLine

Credo che siete alla ricerca di un elemento composito. C'è un esempio nel riferimento che in realtà utilizza Ordine e purchasedItems (righe d'ordine). Quando Hibernate dice che non può stare in piedi da sola, che non significa che non può avere la propria tabella, solo che la sua sempre associato con l'elemento principale:

<class name="eg.Order" .... >
  ....
  <set name="purchasedItems" table="purchase_items" lazy="true">
    <key column="order_id"/>
    <composite-element class="eg.Purchase">
      <property name="purchaseDate"/>
      <property name="price"/>
      <property name="quantity"/>
      <many-to-one name="item" class="eg.Item"/>
    </composite-element>
  </set>
</class>

Da: Collezioni di dipendenti oggetti

valore oggetto è un piccolo oggetto che rappresenta una semplice entità cui parità non è basata su identità: cioè due oggetti valore sono uguali quando hanno lo stesso valore, non necessariamente della stessa objecect

Potete ordine-linee come tipo di valore e il tipo di valore è supportato con uno-a-uno mappatura, nonché uno-a-molti mappatura. Ovviamente raccolte Java sono utilizzati per mappare il * -per-molti di tipo valore con entity.Inside adatto raccolta, elemento composito e-elemento sono utilizzati come richiesto e descritto di seguito: Per uno a molti tra entità e tipo di valore (tipo non JDK), composite-element viene utilizzato. Per uno-a-molti dove tipo tabella valore deve contenere un singolo attributo di tipo JDK (diciamo stringa), elemento viene utilizzato. Questo concetto è fornita nel capitolo 6 della persistenza Java con Hibernate. Per i dettagli, consultare questo link https://docs.jboss.org/hibernate/orm /3.5/reference/en/html/components.html

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