Új hozzászólás Aktív témák
-
Szmeby
tag
válasz
jetarko
#6225
üzenetére
Duplázódás vagy többszöröződés van?
Most hogy láttam a kódod, előjöttek a régi emlékeim.

Nálam többszöröződés jött elő, az adatszerkezet kicsit más volt, de a lényeg ugyanaz: egy entitásban több (egymástól független) lista eager fetch-csel.A problémám az volt, hogy a listák ugyan kis elemszámúak voltak, de többnyire nem 1 elemet tartalmaztak, hanem 2-6 körül. Ami azt eredményezte, hogy a Hibernate a háttérben megcsinálta ezek Descartes-szorzatát, tehát egy 3 elemű lista megtriplázta a másik lista elemeit. (És a Hibernate szerint ez így normális.)
Esetleg érdemes lehet bekapcsolnod a show_sql kapcsolót, hogy megnézhesd, milyen sql lekérdezést gyárt, és azt külön elpattintva milyen resultsetet kapsz. Ne számíts arra, hogy a Hibernate a háttérben majd megszűri neked a duplikátumokat.
Már jó rég volt, de ha jól emlékszem, végül az lett a megoldás, hogy a listákat külön-külön select töltötte fel. A design nem engedte meg, hogy Settel bohóckodjak.
-
floatr
veterán
válasz
jetarko
#6225
üzenetére
Pedig nekem is van hasonló mapping pár, és nem látok benne hibát. Kipróbáltam a saját alkalmazásban átírni a collection-t EAGER-re, de akkor sem csinálta ezt. Azt még esetleg megpróbálhatnád, hogy egy teszt erejéig kiszeded az EAGER-t, és a korábban bemásolt kódrészletet kibővíted így:
public Team getTeamById(int id) {
Session session = this.sessionFactory.getCurrentSession();
Team t = (Team) session.get(Team.class, new Integer(id));
// ha lazy collection, akkor így betölti az elemeit egy második query-ben
t.getDrivers().size();
return t;
}Még esetleg azt tudom elképzelni, hogy dialect-függő a dolog. Én eddig mssql, postres és derby adatbázisokkal használtam, de csak elcseszett join-ok esetében találkoztam hasonlóval.
Annyit még érdemes megfontolni, hogy az EAGER típusú kapcsolatok nagyon oda tudnak vágni az alkalmazásnak, ezért is alapértelmezett a LAZY. Én mindenhol ezt használom, és inkább egy OpenSessionInViewFilter-t teszek a web.xml-be. Oda akkor viszont már kelleni fog tranzakció is meg egyebek.
Új hozzászólás Aktív témák
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- Luck Dragon: Asszociációs játék. :)
- sziku69: Fűzzük össze a szavakat :)
- Világ Ninjái és Kódfejtői, egyesüljetek!
- A nagy Szóda, Szódakészítés topic - legyen egy kis fröccs is! :-)
- exHWSW - Értünk mindenhez IS
- Kés topik
- World of Tanks - MMO
- Path of Exile (ARPG)
- Samsung Galaxy Felhasználók OFF topicja
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- További aktív témák...
- Eladó PXN V9 Kormány szett PC-hez és Konzolokhoz
- Lenovo Thinkpad T14 Ryzen 5 4650u/8GB/256GB SSD/14"FHD laptop
- ASUS ROG STRIX GeForce RTX 3060 12GB eladó
- DELL OPTIPLEX 7010 SFF PC, I5-3570 CPU, 2 GB R5 430 VGA, Windows 10
- ASUS Vivobook Pro 15 - 15.6" FHD IPS 144Hz - Ryzen 5-5600H - 16GB - 512GB - RTX 3050 - MAGYAR - Win1
- AKCIÓ! ASRock B450M R5 5500 16GB DDR4 512GB SSD RTX 2060 6GB Zalman T3 Plus ADATA 600W
- AKCIÓ! ASUS H110M i5 6500 8GB DDR4 120GB SSD 500GB HDD GTX 1050Ti 4GB Zalman T3 Plus NBASE 600W
- HP ProBook 445 G8 14" Ryzen 5 5600U, 8-16GB RAM, 256-512GB SSD, jó akku, számla, 6 hó gar
- 222 - Lenovo LOQ (15IRX10) - Intel Core i5-13450HX, RTX 5050
- 154 - Lenovo LOQ (15IRX9) - Intel Core i5-13450HX, RTX 4060 (ELKELT)
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest


