• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    BUTHRAKAURObject Relational Mapping :: rady, tipy, triky
     
    Object Relational Mapping

    [ Board.doc ]

    Diskuze o objektove relacnim mapovani.
    Ptejte se, treba budem vedet .)

    [ Board.quicklinks ]

    Wiki - ORM na wikipedii
    Castle ActiveRecord
    NHibernate Query Analyzer
    NHibernate Query Generator
     
     

    No flames | Check homepage

     
    rozbalit záhlaví
    BUTHRAKAUR
    BUTHRAKAUR --- ---
    SAJAGI: jeste se ted objevil jeden aktualni nadejnej NH3.3 fork :)
    https://github.com/davybrion/Nhibernate.Spatial
    SAJAGI
    SAJAGI --- ---
    BUTHRAKAUR: Nakonec jsem rozchodil tu verzi, co jsem linkoval, chtělo pár úprav ve zdrojáku, zaktualizovat knihovny, a je to. Zatím to funguje -.-
    BUTHRAKAUR
    BUTHRAKAUR --- ---
    SAJAGI: hmm.. to jsem nikdy nepouzil a na NH githubu to neni, na NH foru zadny kloudny info.. ale na NHForge nekdo pise, ze se to da s par drobnejma upravama rozchodit a na githubu je par nejakejch pochybnejch forku, tak bych je zkusil prozkoumat.
    SAJAGI
    SAJAGI --- ---
    Tak ještě jeden dotaz. Je spatial support pro NH stále aktivní? Poslední úprava je z 29. prosince 2011 (což není tak dávno), ale nedá se zbuildit. (https://nhcontrib.svn.sourceforge.net/svnroot/nhcontrib/trunk/src/NHibernate.Spatial)
    Nebo existuje někde novější repo?
    SAJAGI
    SAJAGI --- ---
    BUTHRAKAUR: Dík, nakonec jsem to udělal vlastním view, který jsem namapoval na entitu Image pod vlastním EntityName. Včera jsem s NHibernatem pořádně začal, tak se furt učím :)
    BUTHRAKAUR
    BUTHRAKAUR --- ---
    SAJAGI: klasickym NH dotazovanim myslim ne, ale NH umi spoustet i obyc SQL a namapovat vysledek a tim by to melo IMO jit..
    SAJAGI
    SAJAGI --- ---
    Ahoj,

    mám many-to-many relaci mezi třídami Album a Image (provázanou junction tabulkou AlbumImage). Dá se nějak přes NHibernate zjistit, které položky z Image nejsou v žádném Albu, aniž bych definoval entitu AlbumImage?
    BUTHRAKAUR
    BUTHRAKAUR --- ---
    GOSHEWAN: aha - ja mam jeste verzi 1.1, tak to mozna zmenili. kazdopadne to bylo stejne jen synonymum pro neco jako Index a Element (viz napr tady), takze neco takovyho by tam urcite porad melo byt. napis si na to mapovani unit test a proste zkousej - takhle ti asi vic neporadim, kdyz ten kod ani DB nevidim.

    ted jeste koukam do tech 1.2.0.712 src a obdoba toho DictionaryKey/Value mapovani by mela vypadat takhle:

    HasMany(x => x.Dict)
    .Table("TableX")
    .KeyColumn("keyColumn")
    .Element("valueColumn");
    GOSHEWAN
    GOSHEWAN --- ---
    DictionaryKey ani DictionaryValue nikde nevidim... Pouzivam, pokud to dobre chapu, Fluent NHibernate v1.2.0.712
    BUTHRAKAUR
    BUTHRAKAUR --- ---
    GOSHEWAN: porad uplne nechapu, jak presne ty tridy vypadaj a jak vypada to DB schema, ale obyc dictionary se da namapovat treba nejak takhle:

    HasMany(x => x.Dict)
    .Table("TableX")
    .DictionaryKey("keyColumn")
    .DictionaryValue("valueColumn");
    GOSHEWAN
    GOSHEWAN --- ---
    Reference na entitu by tam byt mela, ale neni a ja to neovlivnim /-:

    Obecne potrebuju postup jak rict, cim ma naplnit ten slovnik a jak rict, ze to ma byt i z jine tabulky.
    BUTHRAKAUR
    BUTHRAKAUR --- ---
    GOSHEWAN: asi uplne nechapu, co je to "Local ID" vs "Global ID", ale prijde mi to nejaky zbesily - nemely by tam byt spis reference na entitu A/B/C? mozna by pomohlo, kdybys ukazal aspon trochu kodu... takhle podle popisu mi to prijde nejak podezrele neOO, ale to se mozna jen pletu :)

    jinak prikladu na mapovani Dictionary pres (F)NH je na stackoverflow apod celkem hodne, ale nevim, jak moc jsou pouzitelny v tomhle pripade...
    GOSHEWAN
    GOSHEWAN --- ---
    Ahoj,

    byl jsem postaven pred problem napasovani jedne konstrukce do (Fluent) NHibernate. Nikdy jsem s tim nedelal a uvitam jakykoli hint:

    Mam Entitu A, ktera drzi IDictionary<int, double> s tim, ze key je "Local ID", double nejaka pridruzena hodnota.
    Dalsi entita B ma "Global ID" (unique) a "Local ID" (muze se opakovat).
    Posledni entita C predstavuje mapovani mezi prvni a druhou vcetne te pridruzene double hodnoty, tzn. ma "Global ID 1", "Global ID 2", "value".

    Napada vas nejaky zpusob, jak to namapovat? Pokud to chapu spravne, tak potrebuju nejaky "mezidotaz" pri plneni toho IDictionary. Rict "napln IDictionary v A tak, ze se podivas do DB na entitu C a vyberes jen ty, kde GlobalID1 == A.ID. Vezmi "result.GlobalID2" a "result.value". Prvni pouzij, abys nasel v entitach B jeji LocalID a timhle pak napln ten slovnik".
    Validitu mapovani mam zajistenou jinde (jinymi slovy - vysledne LocalIDs budou pro danou entitu A unikatni (tzn. budou pro ni lokalni ID)).

    Tzn. jak mu vnutim
    a) kombinace dotazu na jine tabulky
    b) co ma pouzit jako klic a co jako hodnotu v tom slovniku
    SWITCHMAN
    SWITCHMAN --- ---
    ocividne ne .)
    BUTHRAKAUR
    BUTHRAKAUR --- ---
    BUTHRAKAUR
    BUTHRAKAUR --- ---
    BUTHRAKAUR
    BUTHRAKAUR --- ---
    JIMMYJAMES: enum by melo jit namapovat pomoci vlastni implementace IUserType. pokud ale nechces udrzovat ty prvky enum na 2 mistech a pokud chces v DB osetrit integritu, tak ti asi nezbyde nez vyrobit na ty role tabulku a v aplikaci v DB vrstve potom nekde implementovat neco jako GetReziserRole() apod..
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    JIMMYJAMES: Hibernate neznam, ale ten enum by urcite sel predelat na tabulku, ne? Ta by pak mela vychozi obsah (reziser, herece, osvetlovac, atd...).
    JIMMYJAMES
    JIMMYJAMES --- ---
    Zdravím,
    neví někdo jak na ternární asociaci v Hibernate/JPA (používám anotace)?

    Mám tuto situaci; eviduju filmy a u nich lidi, kteří se podíleli na jeho tvorbě (tzn. režiséři, scénáristi, herci... nazývám jako "role"). Každý film může mít více lidí stejné role, každý člověk může mít více rolí, každý člověk může být u více filmů.

    V databázi to vypadá takto:
    Movie (MOVIE_ID, released, runtime, ...);
    People (PEOPLE_ID, name, ...);
    Movie_people (MOVIE_ID, PEOPLE_ID, role); UNIQUE (MOVIE_ID, PEOPLE_ID, role);

    Role je v Hibernate jako Enum. (Nevím, jak synchronizovat Enum v aplikaci s číselníkovou tabulkou či enumem v DB (a nehci to definovat zvlášť na dvou místech), takže momentálně to mám tak, že role je v DB jen číselná hodnota, není FK. Mimochodem, kdyby někdo znal lepší řešení, tak určitě vítám, z databázového pohledu se mi tohle nelíbí.)

    Chtěl bych to namapovat nějak takto:
    Map<Role, Set<People>> people

    Role je Enum type, People doménová třída (@Entity).

    Cílem je, abych mohl jednoduše zavolat:
    Collection<People> getPeople(Role role);
    addPeople(Role role, Collection<People> people);

    Už jsem strávil několik hodin hledání, našel jsem i stejný problém v několika diskuzích, ale nikdo to nedokázal vyřešit (ale zatím nikdo nevyloučil, by to nešlo...).
    Kliknutím sem můžete změnit nastavení reklam