[Javalist] Hibernate outer join
István Viczián
viczian.istvan at gmail.com
2013. Okt. 23., Sze, 10:01:43 CEST
Üdv,
Szerintem olvasd el ezt is, van benne trükk:
http://jtechlog.blogspot.hu/2013/03/jpa-tobb-one-to-many-kapcsolat.html
Mi ezzel igen szépen tudtunk optimalizálni.
--
Viczián István
Király Péter <kirunews at freemail.hu> írta (2013. október 22. 22:30):
> Sziasztok,
>
> következő a problémám. Vannak felhasználók, akiknek lehetnek elmentett kereséseik, címkéik, kedvenceik, és API kulcsaik. Mind az öt egy-egy különálló osztály, hozzá tartozó táblázattal az adatbázisban, a user azonosítója köti őket a user objektumhoz. Az egész ügyet a Hibernate kezeli. Amikor egy-egy felhasználónak volt több tucat elmentett eze-aza, akkor ez egyes mentések elkezdtek lassulni. Némi nyomozás után kiderült, hogy amikor egy user objektumot lekérek, akkor a Hibernate outer join-nal összekapcsolja a táblákat és létrejön egy baromi nagy, redundáns taláati lista az adatbázisban (például 94 ez, 9 az, 14 amaz és 5 emez esetén 59 220 soros találati halmaz, ami sosornként tartalmazza az összes tábla összes oszlopát (némelyiket duplán is -- 94 * 9 * 14 * 5 = 59 220). Egy Hibernate FAQ (https://community.jboss.org/wiki/HibernateFAQ-AdvancedProblems?_sscc=t#jive_content_id_Hibernate_does_not_return_distinct_results_for_a_query_with_outer_join_fetching_enabled_for_a_collection_even_if_I_use_the_distinct_keyword) azt mondja, hogy ez normális. Lehet ugyan trükközni a HQL-ben, de az nem az SQL-t fogja módosítani, hanem a találati halmazon a memóriában fog változatni. Ezt nem nagyon akarom elhinni. Hogy lehet az, hogy amikor mind a adatbázisban, mind a Java objektumok oldalán szépen normalizáljuk a dolgokat, a Hibernate nem egyesével kérdezi le a csatolt táblákat, hanem egy ilyen erőforráspazarló és lassú megoldást produkál? Azt remélem, hogy van valamilyen kapcsoló, amit én nem vettem észre. Merre induljak el, mit tanácsoltok?
>
> Köszönettel,
> Király Péter
> _______________________________________________
> Javalist mailing list
> Javalist at lists.javaforum.hu
> http://lists.javaforum.hu/mailman/listinfo/javalist
További információk a(z) Javalist levelezőlistáról