NHibernate

A Wikipédiából, a szabad enciklopédiából
NHibernate
Hibernate logo a.png

Legfrissebb stabil
kiadás
3.3.0.GA (2012. április 21.) [1] +/-
Legfrissebb fejlesztői kiadás ismeretlen +/-
Operációs rendszer Platform független (.Net)
Platform .NET 1.1 vagy 2.0 vagy 3.5 vagy 4.0 és Mono
Kategória Objektum-relációs leképző
Licenc GNU Lesser General Public License
A NHibernate weboldala

Az NHibernate[2] egy objektum-relációs leképező (ORM) megoldás Microsoft .NET platformhoz: keretrendszert biztosít objektumorientált alap modellről hagyományos relációs adatmodellre való leképzéshez. A célja az, hogy levegye a programozó válláról, a perzisztencia megvalósítás terhének jelentős részét. Az NHibernate egy ingyenes szoftver, amely nyílt forrás kódú is, a GNU Lesser General Public License licencelt. Az NHibernate a közkedvelt Java O/R leképző Hibernate szoftver potolásásaként keletkezett .NET platformra.


Képességek összefoglalása[szerkesztés | forrásszöveg szerkesztése]

Az NHibernate fő funkcionalitása az, hogy a .Net osztályokat képes leképezni adatbázis táblákra (azaz CLR adat típusokból SQL adat típusokra tud leképezni). Az NHibernate nyújt szolgáltatásokat az adatok visszanyeréséhez is. Az NHibernate generálja az SQL lekérdezéseket, és megkíméli a fejlesztőt azok elkészítésétől, úgy hogy a kód a lehető legszélesebb skálán használható legyen az SQL szolgáltatók számára, az adatbázis portolhatóság megtartása és lehető legkisebb teljesítmény többlet költség mellett.

Az NHibernate átlátszó perzisztenciát nyújt a normál CLR objektumok számára ("Jó öreg CLR Objektumok", POCO-k). Az egyetlen szigorú megkötés az osztály számára a paraméter nélküli konstruktor megléte, amely nem szükséges, hogy public elérési módosítóval legyen ellátva. (Egyes megoldások megfelelő működése különös figyelmet igényel az Equals() és a GetHashCode() metódusok megvalósítását illetően.[3])

Története[szerkesztés | forrásszöveg szerkesztése]

Az NHibernate megvalósítását Tom Barrett kezdte el, később Mike Doerfler és Peter Smulovics vette át a fejlesztését. Jelenleg Fabio Maulo a projekt vezetője. 2005 végén, a JBoss Inc.-es (jelenleg a Red Hat része) Sergey Koshcheyev örökölte, és vezette tovább az NHibernate fejlesztéseket teljes munkaidőben.[4] 2006 végén a JBoss leállította a projekt támogatását; jelenleg teljes egészében közösség viszi tovább a projekt fejlesztését.

Az 1.0 verzió inkább a Hibernate 2.1-es verziójának képességeit tükrözte, mint a Hibernate 3-asét, amiből minimálisat valósított meg.

Az NHibernate 1.2.1-et 2007. novemberében adták ki, még több Hibernate 3-as képesség felvonultatásával, és .NET 2.0 támogatással, tárolt eljárások, generikus típusok, és nullable típusok támogatásával.

Az NHibernate 2.0-et 2008. augusztus 23-án adták ki, a Hibernate 3.2 képességeinek szolgáltatásával. Az NHibernate 2.0-ás kiadása feladta a .NET 1.1.-es támogatást.[5]

Az NHibernate 2.1 2009. július 17-én látott napvilágot.

Az NHibernate 3.0-et 2010. december 04-én adták ki, és az első olyan verzió volt, amely .Net 3.5-ös verzióját támogatja. Bevezette a beépített LINQ támogatást és egy erősen típusos feltétel-szerű API-t QueryOver néven, új AST-alapú értelmezőt az NHibernate HQL (Hibernate Query Language) motorhoz, ami támogatja az oszlopok lusta betöltését.

Az NHibernate 3.2-t 2011. áprilisában adták ki.

Az NHibernate 3.3-t 2012. április 24-én adták ki.

Újdonságok a NHibernate 3.2-ben[6][szerkesztés | forrásszöveg szerkesztése]

  • Kód alapú leképezés: Könnyű konfigurálás, .hbm.xml használata nem szükséges a továbbiakban;
  • Allekérdezés: SQL nézetek entitásokká képezhetők le;
  • HQL lapozás: TAKE és SKIP a HQL-ben;
  • Beépített bájtkód szolgáltató: eggyel kevesebb DLL, amit telepíteni kell.

Újdonságok a NHibernate 3.3-ban [7][szerkesztés | forrásszöveg szerkesztése]

  • Több fejlesztés a LINQ kiszolgálóban, hogy az általa kezelt lekérdezések halmaza bővüljön.
  • Az id generátorok "enhanced" családjának bevezetése. Ez másolható szekvenciaként vagy táblába, beépített támogatása több

id sorozat nyomkövetésére azonos táblában, és egy közös halmaz a optimalizálásokhoz, amelyek implementáltak HiLo vagy Pooled algoritmusokkal is.

  • néhány új funkció az előző verzió kód alapú leképezéséhez.
  • rengeteg hibajavítás más területeken.

Fejlesztések[szerkesztés | forrásszöveg szerkesztése]

Nyílt forrású szoftverként az NHibernate-hez rengetegen hozzájárulást kapott a közösségtől. Ezek legtöbbje direkt belső funkcióként került be a szoftverbe, a többit a felhasználók eszközökben és dokumentációkként szolgáltatták.

A LINQ implementáció lehetővé tette a nyelvbe épített lekérdezések NHibernate-es alkalmazását.[8]

Példa[szerkesztés | forrásszöveg szerkesztése]

Az alábbi kódrészlet hozzáad egy objektumot az adatbázishoz, illetve vissza nyeri azt, módosít és frissít egy objektumot az NHibernate használatával.

//Hozzá ad egy Customer-t (vásárló) az adattárolóhoz
 
//'sessionFactory' egy szálbiztos objektum amely egyszer fordul az alkalmazás élettartama alatt (eltarthat pá másodpercig)
//a konfigurációs fájlok alapján amelyek a táblák C# objektumokká történő leképzését határozzák meg
//(értsd, mely tulajdonságok mely oszlopokká kerülnek leképzésre)
//
//'session' nem szálbiztos, gyorsan lekérhető és egy adatbázis kapcsolat ként tekinthetünk rá
using (var session = sessionFactory.OpenSession()) 
{
    //a tranzakció egy db adatátvitelt felügyel
    using (ITransaction transaction = session.BeginTransaction()) 
    {
        //Az alábbi sor hozzáadja a customert az NHibernate objektum listájához, hogy az adatbázisba illessze azt,
        //de az az SQL insert parancs még ekkor nem kerül végrehajtásra*.
        //*ha a Id-t az adatbázis generálja (értsd automatikusan növelt szám az oszlop típusa) 
        //akkor az NHibernate le fogja futtatni az SQL INSERT-et amikor a .Save meghívásra kerül
        session.Save(new Customer { Id = Guid.NewGuid(), FirstName = "Bill", Age = 50 });
 
        //Az alábbi utasítás lefuttatja az SQL INSERT-et és véglegesíti a tranzakciót a hívással
        transaction.Commit();
    }
}
 
//Visszanyeri a Customer-t a db-ből, megváltoztatja a bejegyzést és frissíti az adatbázisban
using (var session = sessionFactory.OpenSession())   
using (ITransaction transaction = session.BeginTransaction()) 
{
    //a session lekérdezése egy IQueryable<Customer>-el tér vissza. (megj.: a LINQ kollekciókkal dolgozik)
    //csak a .FirstOrDefault hívásakor futtatja az NHibernate az SQL lekérdezést
    Customer customer = session.Query<Customer>().Where(c => c.Token == token ).FirstOrDefault();
 
    //Most már a Customer része a 'session' objektumnak és a NHibernate figyel a rajta végrehajtott változtatásokra
    //tegyük hát meg 
    if( customer != null ) 
    {
        //egy tulajdonság megváltoztatása nem okoz SQL lekérdezést
        customer.TokenVerified = true;
 
       //A tranzakció véglegesítése egy SQL UPDATE utasítás végrehajtását eredményezi
       //NHibernate követi a 'customer' változásait a betöltése óta
       transaction.Commit();
    }
}

Megjegyzendő, hogy NHibernate beállításain múlik, hogy az NHibernate mikor futtatja az SQL utasításokat.

Lásd még[szerkesztés | forrásszöveg szerkesztése]

Jegyzetek[szerkesztés | forrásszöveg szerkesztése]

Ajánlott könyvek[szerkesztés | forrásszöveg szerkesztése]

Külső hivatkozások[szerkesztés | forrásszöveg szerkesztése]

Fordítás[szerkesztés | forrásszöveg szerkesztése]

Ez a szócikk részben vagy egészben a NHibernate című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel.