Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Lothric 15. 06. 2018, 00:02:28

Název: JPA vs. hibernate v praxi
Přispěvatel: 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
Název: Re:Jpa vs hibernate
Přispěvatel: tdvorak 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.
Název: Re:Jpa vs hibernate
Přispěvatel: technomaniak 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..).
Název: Re:Jpa vs hibernate
Přispěvatel: Youda 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?
Název: Re:Jpa vs hibernate
Přispěvatel: tdvorak 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?
Název: Re:Jpa vs hibernate
Přispěvatel: perceptron 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
Název: Re:Jpa vs hibernate
Přispěvatel: technomaniak 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.
Název: Re:Jpa vs hibernate
Přispěvatel: tdvorak 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?! 
Název: Re:Jpa vs hibernate
Přispěvatel: Youda 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."
Název: Re:Jpa vs hibernate
Přispěvatel: tdvorak 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.
Název: Re:Jpa vs hibernate
Přispěvatel: BoneFlute 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 :-)
Název: Re:Jpa vs hibernate
Přispěvatel: Ondrej Nemecek 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ě.