Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Lothric 15. 06. 2018, 00:02:28
-
Ahoj,
jak to funguje v praxi? Vím, že hibernate je implementace JPA, nicméně co se například více používá:
SessionFactory vs EntityManager?
Kdy se co používá, proč, čemu se dává přednost v praxi?
Díky
-
V projektech, na kterych pracuju a pracoval jsem, se pouziva JPA. Po samotnem Hibernate v pozadi se saha jen, kdyz je to nevyhnutelne a nelze to provest pomoci JPA.
Motivace je udrzet kod cisty, pokud mozno bez zavislosti na konkretni implementaci, drzet se standardu. Tak jako z mych metod vracim radeji genericke rozhrani (Set nebo Collection) i kdyz je na pozadi napriklad LinkedHashSet.
Dalsi duvod je ten, ze nad generickym JPA pracuji dalsi knihovny a nastroje, treba https://spring.io/guides/gs/accessing-data-jpa/
Stejny pristup se opakuje i v jinych castech java API. Kdyz pujde o JMS, budu se drzet standardniho API, i kdyz vim, ze mam zrovna na pozadi konkretni implementaci, treba ActiveMQ. Opet - kod je cistsi, bez zbytecnych zavislosti na konkretni implementaci, snadneji udrzovatelny a pochopitelny, lepe pouzitelny.
-
V projektech, na kterych pracuju a pracoval jsem, se pouziva JPA. Po samotnem Hibernate v pozadi se saha jen, kdyz je to nevyhnutelne a nelze to provest pomoci JPA.
...
Samotné JPA nelze použít.
https://stackoverflow.com/questions/15487631/can-we-use-jpa-without-hibernate
Nicméně rád se poučím když mě řekneš jak dokážeš namapovat si entitu jenom k knihovnamy z Java SE případně knihovnamy z aplikačních serverů( žádný OpenJPA,Spring,EclipseLink, apod..).
-
V projektech, na kterych pracuju a pracoval jsem, se pouziva JPA. Po samotnem Hibernate v pozadi se saha jen, kdyz je to nevyhnutelne a nelze to provest pomoci JPA.
...
Samotné JPA nelze použít.
https://stackoverflow.com/questions/15487631/can-we-use-jpa-without-hibernate
Nicméně rád se poučím když mě řekneš jak dokážeš namapovat si entitu jenom k knihovnamy z Java SE případně knihovnamy z aplikačních serverů( žádný OpenJPA,Spring,EclipseLink, apod..).
Co jsi nepochopil z prvni odpovedi v tom tvem odkazu?
-
Samotné JPA nelze použít.
https://stackoverflow.com/questions/15487631/can-we-use-jpa-without-hibernate
Nicméně rád se poučím když mě řekneš jak dokážeš namapovat si entitu jenom k knihovnamy z Java SE případně knihovnamy z aplikačních serverů( žádný OpenJPA,Spring,EclipseLink, apod..).
Ja ale nerikam, ze Hibernate nemam jako zavislost. Jen rikam, ze k nemu pristupuju pouze pres JPA. Typicky tak neimportuju a nesaham na zadne tridy z org.hibernate a pouzivam pouze ty z javax.persistence.
Stejny pristup jako pro JMS - pristupuju k message queues pres java messaging API (nebo treba pres Spring integraci), nesaham na knihovnu, ktera to rozhrani ve skutecnosti implementuje.
JSON? Pouzivam javax.json-api, i kdyz realna implementace je org.glassfish.javax.json.
Je z toho videt ten vzorec, ne?
-
jpa je api, hibernate jedna z implementácii
servlety su api, tomcat jedna z implementacii
prefer apis to implementations
-
Co jsi nepochopil z prvni odpovedi v tom tvem odkazu?
TAKŽE ještě jednou a pomaleji : Nicméně rád se poučím když mě řekneš jak dokážeš namapovat si entitu z databáze jenom s knihovnamy z Java SE případně knihovnami z aplikačních serverů( žádný framework typu OpenJPA,Spring,EclipseLink,Hibernate apod..).
Dokážeš to? nebo budeš prudit píčoviny úměrné tvým schopnostem joudíku.
2tdvorak : Zmateně vysvětluješ. VŽDYCKY POUŽÍVÁŠ implementaci v tvém případě Hibernate, tudíš věta "V projektech, na kterych pracuju a pracoval jsem, se pouziva JPA. Po samotnem Hibernate v pozadi se saha jen, kdyz je to nevyhnutelne a nelze to provest pomoci JPA" je blbost(blábol) vzniklá s nepochopení problematiky.
2Lothric : Tvůj dotaz je špatně položený. Používají se oba přístupy, v závislosti na okolnostech, oba fungují. Ten první převážně u legacy projektu a entity manager u novějších. Zásadní rozdíly mezi nimi nejsou ale to znamená že jednou třeba nebudou.
-
2tdvorak : Zmateně vysvětluješ. VŽDYCKY POUŽÍVÁŠ implementaci v tvém případě Hibernate, tudíš věta "V projektech, na kterych pracuju a pracoval jsem, se pouziva JPA. Po samotnem Hibernate v pozadi se saha jen, kdyz je to nevyhnutelne a nelze to provest pomoci JPA" je blbost(blábol) vzniklá s nepochopení problematiky.
Ne, ja implementaci (tridy z org.hibernate) nepouzivam v mem kodu, ktery pisu. Ja ji pouze definuji jako zavislost. Jako programator k ni pak pristupuji pouze skrze JPA (javax.persistence). Jasne, ze aplikace v dusledku vse prozene skrze Hibernate (nebo jinou implementaci), protoze JPA je jen interface. To snad neni treba vysvetlovat od zakladu. Na to se taky tazatel neptal a vsem je to tu jasne. Nemusis nam to znovu opakovat.
Tvůj dotaz je špatně položený. Používají se oba přístupy, v závislosti na okolnostech, oba fungují. Ten první převážně u legacy projektu a entity manager u novějších. Zásadní rozdíly mezi nimi nejsou ale to znamená že jednou třeba nebudou.
Tohle je naopak nesmysl. Ten dotaz je naprosto v poradku - tazatel se pta, jestli ma pouzivat API (JPA) nebo primo implementaci (Hibernate). Na to mu ty poradis, ze je to jedno a ze v tom vlastne neni rozdil. Coze?!
-
Co jsi nepochopil z prvni odpovedi v tom tvem odkazu?
TAKŽE ještě jednou a pomaleji : Nicméně rád se poučím když mě řekneš jak dokážeš namapovat si entitu z databáze jenom s knihovnamy z Java SE případně knihovnami z aplikačních serverů( žádný framework typu OpenJPA,Spring,EclipseLink,Hibernate apod..).
Dokážeš to? nebo budeš prudit píčoviny úměrné tvým schopnostem joudíku.
Taktez zpomalim, prvni veta prvni odpovedi v tvem odkazu zni:
"You are right JPA is specification. Hibernate,EclipseLink are couple of its implementations."
Kteremu slovu nerozumis? Rad pomuzu.
K otazce, ne, za pomoci standardnich java.* knihoven to opravdu nedokazu.
Ani treba v JBossu to bez Hibernate nedokazu, Hibernate je totiz v JBossu pribaleny jako jeho implementace JPA.
https://docs.jboss.org/author/display/AS71/JPA+Reference+Guide?_sscc=t
Cituji: "The JPA subsystem uses the standard SPI (javax.persistence.spi.PersistenceProvider) to access the Hibernate persistence provider and some additional extensions as well."
-
V projektech, na kterych pracuju a pracoval jsem, se pouziva JPA. Po samotnem Hibernate v pozadi se saha jen, kdyz je to nevyhnutelne a nelze to provest pomoci JPA.
Tim napriklad myslim, ze entity pouzivaji anotace z baliku javax.persistence a nepouzivaji nic z org.hibernate.annotations . Pak mam ale treba field s anotaci
@NotFound(action = NotFoundAction.IGNORE)
protoze pro org.hibernate.annotations.NotFound v JPA zadna alternativa neexistuje a ja jsem tak nucen sahnout primo na Hibernate, pokud nechci vyjimku ale radeji null, v pripade, ze druha strana relace v databazi neexistuje.
Nemam z toho radost, ale ne vzdy je vse perfektni a kazde reseni zcela ciste.
-
Co jsi nepochopil z prvni odpovedi v tom tvem odkazu?
TAKŽE ještě jednou a pomaleji : Nicméně rád se poučím když mě řekneš jak dokážeš namapovat si entitu z databáze jenom s knihovnamy z Java SE případně knihovnami z aplikačních serverů( žádný framework typu OpenJPA,Spring,EclipseLink,Hibernate apod..).
Dokážeš to? nebo budeš prudit píčoviny úměrné tvým schopnostem joudíku.
2tdvorak : Zmateně vysvětluješ. VŽDYCKY POUŽÍVÁŠ implementaci v tvém případě Hibernate, tudíš věta "V projektech, na kterych pracuju a pracoval jsem, se pouziva JPA. Po samotnem Hibernate v pozadi se saha jen, kdyz je to nevyhnutelne a nelze to provest pomoci JPA" je blbost(blábol) vzniklá s nepochopení problematiky.
2Lothric : Tvůj dotaz je špatně položený. Používají se oba přístupy, v závislosti na okolnostech, oba fungují. Ten první převážně u legacy projektu a entity manager u novějších. Zásadní rozdíly mezi nimi nejsou ale to znamená že jednou třeba nebudou.
Já jsem @tdvorak celkem rychle pochopil. Třeba ten problém není v něm :-)
-
Co jsi nepochopil z prvni odpovedi v tom tvem odkazu?
TAKŽE ještě jednou a pomaleji : Nicméně rád se poučím když mě řekneš jak dokážeš namapovat si entitu z databáze jenom s knihovnamy z Java SE případně knihovnami z aplikačních serverů( žádný framework typu OpenJPA,Spring,EclipseLink,Hibernate apod..).
Dokážeš to? nebo budeš prudit píčoviny úměrné tvým schopnostem joudíku.
2tdvorak : Zmateně vysvětluješ. VŽDYCKY POUŽÍVÁŠ implementaci v tvém případě Hibernate, tudíš věta "V projektech, na kterych pracuju a pracoval jsem, se pouziva JPA. Po samotnem Hibernate v pozadi se saha jen, kdyz je to nevyhnutelne a nelze to provest pomoci JPA" je blbost(blábol) vzniklá s nepochopení problematiky.
2Lothric : Tvůj dotaz je špatně položený. Používají se oba přístupy, v závislosti na okolnostech, oba fungují. Ten první převážně u legacy projektu a entity manager u novějších. Zásadní rozdíly mezi nimi nejsou ale to znamená že jednou třeba nebudou.
Já jsem @tdvorak celkem rychle pochopil. Třeba ten problém není v něm :-)
Jasně, @tdvorak odpověděl zcela adekvátně a správně.