reklama

JPA vs. hibernate v praxi

Lothric

JPA vs. hibernate v praxi
« kdy: 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
« Poslední změna: 15. 06. 2018, 11:32:37 od Petr Krčmář »

reklama


tdvorak

Re:Jpa vs hibernate
« Odpověď #1 kdy: 15. 06. 2018, 06:32:11 »
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.

technomaniak

Re:Jpa vs hibernate
« Odpověď #2 kdy: 15. 06. 2018, 07:05:19 »
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..).

Youda

Re:Jpa vs hibernate
« Odpověď #3 kdy: 15. 06. 2018, 07:15:59 »
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?

tdvorak

Re:Jpa vs hibernate
« Odpověď #4 kdy: 15. 06. 2018, 07:34:13 »
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?


perceptron

Re:Jpa vs hibernate
« Odpověď #5 kdy: 15. 06. 2018, 08:16:26 »
jpa je api, hibernate jedna z implementácii
servlety su api, tomcat jedna z implementacii

prefer apis to implementations

technomaniak

Re:Jpa vs hibernate
« Odpověď #6 kdy: 15. 06. 2018, 08:37:51 »
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.

tdvorak

Re:Jpa vs hibernate
« Odpověď #7 kdy: 15. 06. 2018, 09:24:26 »
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?! 

Youda

Re:Jpa vs hibernate
« Odpověď #8 kdy: 15. 06. 2018, 09:27:09 »
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."

tdvorak

Re:Jpa vs hibernate
« Odpověď #9 kdy: 15. 06. 2018, 09:58:17 »
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

Kód: [Vybrat]
@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.

Re:Jpa vs hibernate
« Odpověď #10 kdy: 15. 06. 2018, 12:36:56 »
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 :-)

Re:Jpa vs hibernate
« Odpověď #11 kdy: 15. 06. 2018, 15:14:17 »
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ě.

 

reklama