Szoftverfejlesztés J2EE platformon - Entity bean

A VIK Wikiből
A lap korábbi változatát látod, amilyen David14 (vitalap | szerkesztései) 2013. február 6., 00:13-kor történt szerkesztése után volt. (David14 átnevezte a(z) Elsődleges kulcs generálása entity bean-ben lapot a következő névre: Szoftverfejlesztés J2EE platformon - Entity bean)
Ugrás a navigációhoz Ugrás a kereséshez

Ez az oldal a korábbi SCH wiki-ről lett áthozva. Az eredeti változata itt érhető el.

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.