„Szoftverfejlesztés J2EE platformon - Entity bean” változatai közötti eltérés

A VIK Wikiből
Új oldal, tartalma: „{{GlobalTemplate|Valaszthato|J2EEGeneratePrimaryKey}} ==Adatbázis-független módszer== Az ejb projekten a New / Entity Classes from Database... menüpont legenerá…”
 
David14 (vitalap | szerkesztései)
(Nincs különbség)

A lap 2013. február 6., 01:13-kori változata

Ez az oldal a korábbi SCH wikiről lett áthozva.

Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!

Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.


Adatbázis-független módszer

Az ejb projekten a New / Entity Classes from Database... menüpont legenerálja a kész adatbázisból az entity beaneket. A keletkező .java file-okban az elsődleges kulcsot reprezentáló változó (pl.

private Integer id;

) elé írjuk be a =@GeneratedValue= annotációt. Ennek hatására létrejön egy =SEQUENCE= nevű tábla, amiben a következő kulcsot generálódik.

A módszer hátrányai:

  • Lassú, mert minden beszúrás előtt meghív egy select-et és egy update-et is.
  • Ha az adatbázis eredetileg már tartalmazott rekordokat, akkor is 1-gyel kezdi az indexek számozását, így ütközés léphet fel.

Adatbázis-függő módszer

Megadjuk az annotációban, hogy milyen stratégiával generálja a kulcs következő értékét. Az =GenerationType=AUTO= alapbeállítás a leírásával ellentétben nem detektálja az adatbáziskezelőt, és nem használja ki az egyedi megoldásokat.

Microsoft SQL Server esetén a következőképpen kell eljárni:

  • Használjuk az IDENTITY stratégiát: =@GeneratedValue(strategy=GenerationType.IDENTITY)=
  • A táblákat létrehozó scriptet is módosítsuk, hogy automatikusan generálja a kulcsot:
    =id int NOT NULL PRIMARY KEY IDENTITY=
  • Ha rekordokat szúrunk be a scriptből, nem szabad megadni az id értékét.
    • Ha mégis kézzel akarjuk megadni, előtte ki kell adni egy =SET IDENTITY_INSERT táblanév ON= parancsot.
    • A legutoljára beszúrt rekord kulcsát a =@@IDENTITY= változó tartalmazza.
    • Ha nem globálisan, hanem egy konkrét táblára kell az utolsó kulcs, az =IDENT_CURRENT(táblanév)= függvénnyel kérdezhető le.

Oracle-ben IDENTITY helyett táblától független SEQUENCE objektumokat kell használni (nem teszteltem):

  • Stratégia megadása: =@GeneratedValue(strategy=GenerationType.SEQUENCE)=
  • Szekvencia létrehozása: =CREATE SEQUENCE seq=
  • Beszúrás: =INSERT INTO táblanév (id, ...) VALUES (seq.nextval, ...)=
  • Utolsó kulcs lekérdezése: =seq.curval=

Ha van tapasztalatod MySQL-lel vagy PostgreSQL-lel kapcsolatban, légyszi írd le ide!

-- Peti - 2006.11.25.