Nel nostro progetto, abbiamo un'entità "Ristorante" con quasi 30 campi (alcuni hanno relazioni con altre entità). Quindi, ogni volta che abbiamo bisogno di un oggetto "Ristorante" anche per pochi campi, tutti gli altri vengono recuperati. Ciò influisce sulle prestazioni. Quindi, nel file HBM, abbiamo scritto due classi che puntavano alla stessa classe fisica e alla stessa tabella di database, come mostrato di seguito.Come mappare due entità JPA o Hibernate sulla stessa tabella di database
=== restaurant.hbm.xml ===
<!-- Light Weight Version -->
<class name="com.raj.model.Restaurant" table="RESTAURANTS" entity-name="RestaurantLite"
dynamic-update="false" dynamic-insert="false">
<cache usage="read-only"/>
<!-- few basic properties and relationships -->
</class>
<!-- Restaurant -->
<class name="com.raj.model.Restaurant" table="RESTAURANTS" entity-name="Restaurant">
<!-- all properties and relationships -->
</class>
In una delle implementazioni DAO, stiamo usando criteri che prende 'RestaurantLite' e la lista ritorno di ristoranti come illustrato di seguito.
Criteria criteria = session.createCriteria("RestaurantLite");
// criteria related stuff
return new LinkedHashSet<Restaurant>(criteria.list());
Ora vogliamo rimuovere tutti i file hbm e utilizzare le annotazioni. Quindi, come si può fare lo stesso usando le annotazioni per le entrate? Abbiamo bisogno di creare una classe extra "RestaurantLite"? Se poi, come i criteri sopra riportati restituiscono gli oggetti "Restaurant" ??
Questo influisce sulle prestazioni. Fino a che punto? Hai misurato? Come notano i documenti di Hibernate: l'ottimizzazione delle letture delle righe è molto più importante dell'ottimizzazione delle letture delle colonne. Tuttavia, il caricamento di alcune proprietà di una classe può essere utile solo nei casi ** estremi **. Ad esempio, quando le tabelle legacy hanno ** centinaia ** di colonne e il modello di dati non può essere migliorato. https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html#performance-fetching-lazy –
@Alan Hay Abbiamo un database con migliaia di record per ogni tabella. La classe sopra menzionata è necessaria per la maggior parte delle operazioni. Quindi, recuperare tutte le proprietà per ogni ristorante ogni volta ha un impatto negativo sulle prestazioni. Quindi, abbiamo trovato questa soluzione nei file hbm. – Raj44
Tutti i database hanno migliaia,/decine di migliaia/milioni di righe. Come sottolineano i documenti di Hibernate, le ottimizzazioni delle colonne raramente valgono la pena. http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize –