Zazil sem hibernate a bohuzel sem zazil ve velke mire i entity framework od MS. Tyto technologie jsou k nicemu, neusetrili mi nikdy nic, naopak trpi tolika problemy, ze cas vyvoje byt jen trochu slozitejsi aplikace se jimi vzdy prodlouzil. Neexistuji zadne "best pracites", konkretne u entity frameworku jsme skupinove venovali nemaly cas tomu, abychom pochopili jak s nim spravne pracovat. Nepochopil to nikdo, protoze ta vec neni urcena k normalni praci. Code first zapis postrada zcela banalni funkcionality, dotazy neumi temer nic atd. Vyhoda toho, ze jsou data odtrzena on konkretni implementace db padne hned po te, co zjistite, ze bud muzete napsat nativni dotaz, nebo 5 hodin hledat reseni neceho, co v SQL mate za 10 minut. Jako by ten framework nikdo nikdy ani poradne nepouzil. Programovani se misto vymysleni reseni zmeni ve vymysleni rovnaku na ohejbaky a ohybani hlavni casti aplikace tak, aby bylo s pristupem k datum pomoci "datove frameworku" co nejmene problemu.
Zahodte to, pouzijte normalni spojeni na SQL server, mejte zvlast definici tabulek v SQL a zvlast tridy nesouci data a pouzijte rovnou nativni SQL dotazy a budete mi klid a mir v dusi a vse pod kontrolou.
To zni jako ze jste se Hibernate v dusledku moc nenaucili (nic ve zlym). Hibernate neni problem pouzit na jakkoliv slozite databazi, ale clovek musi 1) si o tom neco precist prvne 2) premyslet 3) sledovat, co vlastne po hibernate chce.
99% problemu s hibernate je o tom, ze (taky)programator pouziva hibernate stylem, ze predstira, ze tam zadna databaze neni a to je samozrejme cesta do pekla.
Codefirst se hodi na mensi, jednoduche databaze - celkem prekvapive to neumi vse, co DDL v SQL. Ale da se to velmi jednoduse zkombinovat pomoci SQL skriptu (ktery hibernate spousti pri vytvareni schematu) a nebo nejlepe code first vubec nepouzivat, on k tomu v dusledku neni moc zadny duvod.
Stejne tak JPQL/HQL - povazovat to za nahradu SQL je zcela fundamentalni chyba. Je to uzitecny nastroj pro jednoduche dotazy, pro slozite je potreba pouzit nativni dotazy, mapovani result setu, vytvaret DTO pro mapovani vysledku.
Sila Hibernate je v tom, ze usetri velke mnozstvi casu pri vytvareni entit, CRUD operaci, mapovani jednoduchych dotazu - ale zaroven zachovava veskerou flexibilitu primeho pristupu k DB.
Ale snaha nepouzit tuto flexibilitu u pripadu, kde je to potreba, je presnym opakem toho, jak se ma Hibernate pouzivat.