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

A VIK Wikiből
Ugrás a navigációhoz Ugrás a kereséshez
a
 
1. sor: 1. sor:
{{GlobalTemplate|Valaszthato|J2EEGeneratePrimaryKey}}
 
 
 
 
==Adatbázis-független módszer==
 
==Adatbázis-független módszer==
  
33. sor: 30. sor:
  
 
-- [[PallosPeter|Peti]] - 2006.11.25.
 
-- [[PallosPeter|Peti]] - 2006.11.25.
 
  
 
[[Category:Valaszthato]]
 
[[Category:Valaszthato]]

A lap jelenlegi, 2014. augusztus 21., 20:24-kori változata

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.