openjpa:sql

Monday, September 14th, 2009 | Uncategorized

A probléma: a JPA entitás struktúra folyamatosan fejlődik. Bármikor képes szeretnék lenni az entitásoknak megfelelő adatbázis struktúrát létrehozni, illetve egy meglévő adatbázis struktúrát minél kevesebb adatvesztéssel frissíteni.

Az első követelményt szinte minden JPA provider tudja, a második viszont már keményebb dió. Az Eclipselink pl. csak a drop-and-create szolgáltatást ajánlja, azaz törli az összes táblámat, és újra létrehozza a sémát, még akkor is, ha csak egy új mezőt, vagy egy új táblát hoztam létre.

Az openjpa viszont még az én igényeimet is kielégíti. Erre egyrészt ad egy Java osztályt, de van hozzá Maven plugin is. Megnézi az entitásaimat és tud generálni belőle create DDL-t, illetve refresh-t is, azaz egy meglévő adatbázishoz képest a különbséget. Az adatbázis kapcsolatot a persistence.xml-ből veszi, vagy konzol paraméterből is megadható. Az SQL parancsokat kiírja fájlba, vagy rögtön frissíti/létrehozza az adatbázist is. Elvileg ugyanerre be lehet konfigurálni a Persistence Unitot is, de azt még nem próbáltam ki.

Az első próbák ígéretesek. Új oszlopot, táblát felvesz anélkül, hogy a többit törölné. Ha mezőt törlök, akkor persze nem törli a megfelelő mezőt, de ezt akár tervezési döntésnek is be tudhatjuk.

Nekünk volt erre egy sufni toolunk régen, ami felépítésében sokat ígérő volt, de persze a JPA-ból csak a triviális dolgokat implementáltuk, most viszont ez úgy tűnik el lehet dobni, mert az openjpa jó lesz minderre. Lehet hogy providerként is megpróbálkozom vele.

Tags: ,

4 Comments to openjpa:sql

kocka
2009.09.15

En is talaltam egy par nagyon szeretetre melto dolgot az OpenJPA-ban es hasznaltam is egeszen addig, amig ra nem jottem hogy runtime kodgeneralas nem muxik egyut a JPA querykkel es azon a ponton lealltam vele. Szoval azt hiszem kenytelen vagy az osztalyaidat is meghekkeltetni azzal a maven pluginnal. En visszaodalogtam a hibernate-taborba :-( Ez az 1.2-es szerian volt, nem tudom kijavitottak-e. Lehet ideje lenne beleneznem ujra…

Kristof
2009.09.15

hmm nem is mondtad.. ígéretes :) openjpa doksija és a hibaüzenetei egyébként abszolút példaértékűek, még ha funkcionalitásban el is van helyenként maradva (vagy legalábbis el volt még tavaly)

vrg
2009.09.16

Tetszik a dolog. De mi a helyzet az adatbázis specifikus mondásokkal? Mi van az utólag elhelyezett indexekkel, constrantekkel? Ezekkel is jól bánik? Ugye az a bizonyos sufnimegoldás ilyeneket is generált… erre is találtál már valami megoldást?

elek
2009.11.30

Közben azért erős korlátokba ütköztem. Sajnos az OpenJPA CamelCase táblaneveket használ, amit az EclipseLink nem eszi meg.

Az EclipseLink DDL generátora meg botrány.

Igazából lehet, hogy Vrg-nek lesz igaza, és csak a saját tool lesz belőle, de legalább azt jó lenne elérni, hogy valamelyik Open Source JPA provider-t használni valami belső struktúra felépítéséhez, és az alapján generálni az SQL-eket.

Leave a comment

Blogroll