W naszym projekcie mamy podmiot "Restauracja" z prawie 30 polami (niektóre mają relacje z innymi podmiotami). Tak więc za każdym razem, gdy potrzebujemy obiektu "Restauracja", nawet dla kilku pól, wszystkie pozostałe są pobierane. To wpływa na wydajność. Tak więc w pliku HBM napisaliśmy dwie klasy wskazujące na tę samą klasę fizyczną i tę samą tabelę bazy danych, co pokazano poniżej.Jak odwzorować dwie jednostki JPA lub hibernacji na tej samej tabeli bazy danych
=== 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>
W jednym z wdrożeń DAO, używamy kryteria, które bierze „” i powracający RestaurantLite listę restauracji, jak pokazano poniżej.
Criteria criteria = session.createCriteria("RestaurantLite");
// criteria related stuff
return new LinkedHashSet<Restaurant>(criteria.list());
Teraz chcemy usunąć wszystkie pliki hbm i używać adnotacji. Więc jak można to zrobić za pomocą adnotacji na cele? Czy musimy stworzyć dodatkową klasę "RestaurantLite"? Jeśli tak, to w jaki sposób powyższe kryteria zwracają obiekty "restauracyjne"?
Wpływa to na wydajność. Do jakiego stopnia? Zmierzyłeś? Jak zauważa Hibernate docs: optymalizacja odczytów wierszy jest o wiele ważniejsza niż optymalizacja odczytów kolumn. Jednak ładowanie niektórych właściwości klasy może być przydatne w ** skrajnych ** przypadkach. Na przykład, gdy starsze tabele mają ** setki ** kolumn, a model danych nie może zostać ulepszony. https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html#performance-fetching-lazy –
@Alan Hay Mamy bazę danych z tysiącami rekordów dla każdej tabeli. Wymieniona klasa jest potrzebna do większości operacji. Dlatego pobieranie wszystkich właściwości dla każdej restauracji zdecydowanie za każdym razem wpływa na wydajność. Tak, znaleźliśmy to rozwiązanie w plikach hbm. – Raj44
Wszystkie bazy danych mają tysiące,/dziesiątki tysięcy/miliony wierszy. Jak wskazują dokumenty Hibernatora, optymalizacje kolumn rzadko są opłacalne. http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize –