Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Hibernate - dá se dotahovat LocalDate místo Date?

Aktivity
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:2.4.2021 4:52

Zdravíčko,

nemůžu dlouhodobě najít jednu pro mě zapeklitou věc. Používám ORM, konkrétně hibernate při práci s web API. Vše funguje, ale zvykl jsem si i na základě zdejších tutoriálů používat LocalDate, LocalTime a LocalDateTime třídy pro práci s časem.
Problém je, že když jsem se to pokusil použít u entit při práci s databází, tak mi to řvalo chyby - samozřejmě problém s datovým typem.
S Date třídou to komunikuje v pořádku, ale nevíte někdo, jestli existuje způsob, jak při práci s entitou implementovat LocalDate?

Zkusil jsem: Různě jsem prohledával tutoriály, videa, diskuze, atd.

Chci docílit: Jestli se dá použít v entitách (konkrétně pro framework hibernate) použít pro dotahování datumů místo Date LocalDate.

Odpovědět
2.4.2021 4:52
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
Odpovídá na Lubor Pešek
Petr Štechmüller:2.4.2021 7:53

Ahoj, sám s tím zkušenosti nemám, ale zeptal jsem se Googlu a našel následující výsledky:

https://thorben-janssen.com/…te-and-time/ - uvádí důvod, proč zatím není možné v základu používat "nové" API. Dale ukazuje dva způsoby jak tento neduh vyřešit.

https://stackoverflow.com/…ase/44715566#… - tady je i tom také pěkná diskuze

Vyber si řešení, které více vyhovuje tvému projektu a to použij.

Nahoru Odpovědět
2.4.2021 7:53
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Lubor Pešek
Robert Michalovič:2.4.2021 8:59

Velmi nezkušeně jsi položil otázku, na někoho kdo se tu tak aktivní.

  • není jasné jakou verzi Hibernate a Javy používáš
  • není jasné jakou databázi a v jaké verzi používáš
  • není tu zdroják či jeho část tvé Entity classy kde dané datové typy používáš
  • není jasné jakou chybu ti Hibernate vypisuje

Petr ti tu poslal dvě odkazy ale jsou 4 roky staré z doby Javy8 a éry JPA2.1(standard EE7) a to ještě dané datové typy nebyli implementované.

  • Dle specifikace JPA2.2 viz. PDF https://download.oracle.com/…c/index.html jsou dané datové typy implementovány
  • Řešení 1: tudíž ověř si že tvá verze Hibernate má implementovanou JPA2.2 a případně přejdi na Hibernate 5.3,5.4 (ale i to nemusí pomoci, viz. níže problémy s implementací)
  • Řešení 2: Hold to budeš muset programátorsky obejít (použít jinou implementaci JPA, nepoužívat požadované datové typy, převést přes Stringy, atd.. )

já osobně se Hibernate vyhýbám jako cigán práci, protože má chyby, spoustu věcí neimplemtovaných i když se tváří že ano, v případě v rámci jejich vývoje 1.xx,2.xx,...,5.xx pokaždé dochází k zásadním změnám, které zbytečně musím pak třeba přepogramovávat(něk­dy starší zdrojové kódy u novějších Hibernatu nefungují což je fakt šílené), dále je velmi nekvalitní Hibernate dokumentace = málo examplů a není podrobná, špatně má popsané chyby(velmi blbě se jim rozumí), z mého úhlu pohledu katastrofální popis API ale to má i někdy Java API, velmi časté přesouvání tříd(class) mezi jary, atd..

Mnohem vhodnější je OpenJPA jenž podporuje i JPA2.2 http://openjpa.apache.org/
Nebo EclipseLink jenž podporuje už i JPA3.0 https://www.eclipse.org/eclipselink/#jpa

 
Nahoru Odpovědět
2.4.2021 8:59
Avatar
Lubor Pešek
Člen
Avatar
Odpovídá na Petr Štechmüller
Lubor Pešek:2.4.2021 16:36

Dík, toto je přesně to, co jsem našel i já a právě z toho jsem moc moudrý nebyl :)

Nahoru Odpovědět
2.4.2021 16:36
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
Lubor Pešek
Člen
Avatar
Odpovídá na Robert Michalovič
Lubor Pešek:2.4.2021 16:51

Byla obecně položená otázka. Já nemám s tím problém, že by mě to brzdilo nebo že mi něco nefungovalo.
Chápu, že ty se budeš snažit dokazovat, jak jsi "profesionální" ve všem, ale zrovna od tebe mě překvapuje, že chceš řešit otázku verze.
Už sám titulek napovídá, že nejde o žádný blokační problém, který by mě zásadně brzdil. Jde o to, že chci právě používat novější verze, novější technologie atd.
Kdybych se ptal, jak použít třeba Calendar, tak by to bylo na místě.

Většina metod ve třídě Date je deprecated. Když se dívám na druhé kódy nebo komunikuju s kolegy, tak všichni už používají LocalDate třídy (kde to jde). No a ani nejnovější Hibernate (který používám hlavně proto, protože je to v česku často vyžadováno), tak právě nepodporuje tento typ.

Šlo mi vysloveně o informaci, jestli s tím někdo nemá zkušenosti a jestli neexistuje nějaký způsob, jak to použít, protože proč bych měl být v novějších technologiích závislý na staré implementaci? Prostě chci jít dál a tak jsem použil toto forum, jestli náhodou někdo toto neřešil.

Začínám už skutečně věřit, že ty jsi jen teoretik, který sice může vědět hodně o nových technologiích, může mít přehled o kdejaké nové feature, která vychází, ale nemáš zkušenosti v praxi.
Ano, už o tom tady byla diskuze a byla z mého pohledu velice přínosná, kdy jsem se tu s jedním borcem bavil právě o implementaci nových technologiích do firmy.
Málo kdo z českých firem chce investovat do rozvoje (pak se nedivme, že tu české firmy mají problémy a popravdě když dneska nastoupíš kamkoliv, tak na tebe může vyhrknout i 15 let starý framework, protože firma nechce investovat finance pouze do inovace).
Proto jediný způsob, jak inovovat ve firmě stávající technologie je takový, že člověk sám iniciativně nastuduje vše potřebné a pak si to sám vezme na zodpovědnost.

Takže promiň, že pokládám tak "primitivní" dotaz, když chci pracovat i na takových detailech. Osobně bych z projektu chtěl třeba Date třídu úplně vypustit. A toto je jeden z problémů, který třeba právě řeším.
A to si piš, že jako první, co jsem dělal, tak googlil - ORM with LocalDate type.

Takže proto ani nebylo potřeba sem nahrávat kód, protože promiň, nepřijde mi přínosné, když sem nahraju FUNKČNÍ kód se starým typem a budu k tomu psát, že chci Date změnit na LocalDate. Někdo to pochopí, někdo ne, ale pak nechápu, proč ten, kdo to nepochopí, tak na toto reaguje.

Tady vážně nešlo o nic zásadního, jen jsem hodil otázku do pléna a zkušení programátoři se chytí. No a bohužel i teoretik no:(

Nahoru Odpovědět
2.4.2021 16:51
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
Lubor Pešek
Člen
Avatar
Odpovídá na Robert Michalovič
Lubor Pešek:2.4.2021 17:00

Mimochodem... Ještě jedna věc mě napadá... V čem konkrétně by bylo pro tebe přínosné, kdybych tady uveřejňoval, jakou verzi používám?
Jakou jinou odpověď bys mi mohl dát, kdybys věděl, že to v nějaké verzi funguje, abych tedy přešel na tu konkrétní verzi?
Čistě fakt ze zvědavosti, když to bereš takhle, v čem je pro tebe přínosná informace, abych ti v takovémto případě sděloval verzi?

Nahoru Odpovědět
2.4.2021 17:00
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
Robert Michalovič:4.4.2021 13:37

Velmi vtipná odpověď, fakt člověka bavíš. Uvedu ti např. jak já před mnoha lety řešil velmi primitivní dotaz když jsem třeba měl problém hallo world ve springu s beany např. stackoverflow
https://stackoverflow.com/…itionstoreex

  • koukni na otázku, jak podrobně(kvalitně) byla popsána a ZA JAK DLOUHO jsem dostal odpověď. Pouhých 10 minut. Kvalitně položený dotaz = rychlá, kvalitní a správná odpověď.

Na obecné dotazy, které nejsou kvalitně položeny se ti zkušení(znalí problematiky) lidé vyserou protože umožnují příliš mnoho možností problémů (špatná verze, bug, špatné naprogramované, chyba ve frameworku, chyba v Javě, problémy závislostí, atd.., tyto věci jsou všem seniorům naprosto známé, např. pokud jsi ještě nenarazil na chybu v Javě SE a nečekals na update tak netuším jak programuješ ) a nikomu se nechce probírat všechno variace možností, které mohou nastat. Pokud tvrdíš, že používáš nejnovější hibernate(tedy 6.0 tak ta není stable-stabilní, tudíž plná chyb) pak JPA 2.2 má být implementovaná. Z čehož vyplívá, že jsi možná objevil bug a by vhodné jej nahlásit( jestli vůbec tušíš jak se to dělá ). Kdybys např. zveřejnil zdroják namapování entity tak člověk, který tomu rozumí bude vědět jestli jsi to namapoval správně, buď přes anotace nebo mapuješ přes externí xml. Ve verzi 4.x (4-7 let zpět, éra EE7) byli dost velké problémy s namapováním entity přes anotace ale xml fungovalo vcelku slušně. Kdybys napsal verzi databáze či connectoru pak se snáze vyloučí i chyby connectoru, protože i takové možnosti mohou nastat. Nezveřejnit výpis chyby tak už je spíš k pláči. To vypadá jako kdybys ani odpověď(řešení) nechtěl.

Co se týče přínosnosti ke mě, to je pro mě čistá 0. Navíc jsem ve své reakci o žádném přínosu NIKDE NEMLUVIL. JPA není nijak zásadně složitá, jedná se o velmi triviální problematiku a jestli si bláhově myslíš, že já s toho něco dozvím tak to fakt ne. Fakt řeším věci jiného levelu. Sám jsem měl v plánu tu udělat tutoriál na JPA nebo JMS tak 2,3 roky zpět, ale nejdřív bych měl dorazit DerbyDB. Mimochodem JPA je jedna s těch jednodušších technologií z EE.

Ale OK, budu tvé otázky(dotazy) navěky ignorovat.

 
Nahoru Odpovědět
4.4.2021 13:37
Avatar
Lubor Pešek
Člen
Avatar
Odpovídá na Robert Michalovič
Lubor Pešek:4.4.2021 20:34

Nejvíce přínosná věta z tvého pláče je ta poslední a doufám, že ji splníš.

Nahoru Odpovědět
4.4.2021 20:34
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.