11 komentářů k článku Doctrine 2: pokročilá definice entit:

  1. tomaash

    Identifikátory

    Prosím opravte si větu „Doctrine 2 totiž data entit plnit a číst „zadem“…“ (2. věta v prvním odstavci části Gettery a settery).

    Ale dost bylo hnidopišství: jaký je tedy vlastně rozdíl mezi SEQUENCE a IDENTITY, jestliže pro IDENTITY se v PostgreSQL použije datový typ SERIAL (který implicitně tvoří sekvenci)? Jediný důvod, který mě napadá je možnost parametrizace SEQUENCE (a nemožnost parametrizace IDENTITY :).

    Složené identifikátory mi připadají jako velká slabina Doctrine 2, protože speciálně spojovací tabulky jsou na nich bezpodmínečně závislé (nebo existuje pro práci M:N vazbami nějaký jiný mechanismus?), a nejsou to jen spojovací tabulky, kde to může být problém. Budou tohle autoři Doctrine 2 někdy v budoucnu řešit (při běžném prohledávání webu Doctrine 2 jsem bohužel nenašel žádny roadmap)?

    Omezení v serializaci a klonování se podle manuálu na první pohled nezdají být až tak drastická, uvidím jak se s tím poperu až na to opravdu narazím.

    Díky za seriál,
    jen tak dál! :)

    1. drevolution

      Re: Identifikátory

      jaký je tedy vlastně rozdíl mezi SEQUENCE a IDENTITY, jestliže pro IDENTITY se v PostgreSQL použije datový typ SERIAL (který implicitně tvoří sekvenci)? Jediný důvod, který mě napadá je možnost parametrizace SEQUENCE (a nemožnost parametrizace IDENTITY :).

      Když použijeme strategii SEQUENCE, tak si entity manager zjišťuje jedním databázovým dotazem hodnotu identifikátoru během persistování entity.
      Pokud použijeme IDENTITY, entity manager se o hodnotu identifikátoru nestará a nechává to na výchozí hodnotě sloupce, což u PostgreSQL při použití pseudotypu SERIAL znamená volání next_val(název_sek­vence). Navíc zde známe hodnotu identifikátoru až po flushnutí, což může ovlivnit naší práci s entitami v asociaci.

      Osobně preferuji strategii SEQUENCE, protože mi zajistí, že znám hodnotu identifikátoru hned po persistování. Bohužel, autoři Doctrine2 stále nezměnili hodnotu AllocationSize z 10 na 1, takže si Doctrine alokuje hodnoty po 10, což ústí k tomu, že máme v hodnotách identifikátorů díry. Už dlouho slibují, že to změní na 1, ale ve zdrojovém kódu stále vidím 10. Stále si to tedy člověk musí u sebe přepsat. Je to v třídě ClassMetadata­Factory na řádku 396.

      1. Jan TichýAutor příspěvku

        Re: Identifikátory

        V průběžné vývojové vedrzi Doctrine 2 se dneska v noci výchozí AllocationSize konečně změnil z 10 na 1, změna je zařazena pro zveřejnění v rámci na září plánované Beta 4.

    2. jos

      Re: Identifikátory


      Než se tedy Doctrine 2 dostane do první stabilní verze, raději se prozatím složeným identifikátorům vyhněte

      to bych asi upravil na:
      Než se tedy Doctrine 2 dostane do první stabilní verze, raději se prozatím Doctrine 2 vyhněte

  2. Radek Tuc

    identifikatory a podekovani

    Co se vicenasobnych identifikatoru tyce, predpokladam ze do finalni verze budou urcite doladeny. Jsou zaneseny i v XML schematu pro XML mapping, takze si myslim ze s nimi pocitaji (a jsou podporovany i v ORM Designer editoru).
    Dal bych chtel podekovat za vynikajici serial. Kdyz jsem cetl prvni dil, bal jsem se onoho obvykleho uvodu, pak plytke shrnuti a hotovo. Zatim jsem mile prekvapen a jiz ted se tesim na dalsi dily.

  3. Jimilo

    Persistování entit

    Možná předbíhám, ale zajímalo by mě, zda se v Doctrine 2 ukládají vždy všechny vlastnosti entit (označené @column) najednou nebo se nějak řeší ukládání jen změněné podmnožiny?
    Pokud totiž má daný uživatel např. možnost pracovat jen s omezenou množinou vlastností, tak by při uložení všech vlastností najednou mohl přepsat data se kterými paralelně pracoval jeho kolega, který má oprávnění např. na úplně jinou podmnožinu. (příklad: ekonom nastavuje částku, vedoucí termíny, řešitel řešení apod.)

    1. drevolution

      Re: Persistování entit

      Možná předbíhám, ale zajímalo by mě, zda se v Doctrine 2 ukládají vždy všechny vlastnosti entit (označené @column) najednou nebo se nějak řeší ukládání jen změněné podmnožiny?

      Ukládají se pouze změněné hodnoty. Pro každou entitu se napřed spočítají tzv. change sety a ty se pak ukládají.

      Pokud totiž má daný uživatel např. možnost pracovat jen s omezenou množinou vlastností, tak by při uložení všech vlastností najednou mohl přepsat data se kterými paralelně pracoval jeho kolega, který má oprávnění např. na úplně jinou podmnožinu. (příklad: ekonom nastavuje částku, vedoucí termíny, řešitel řešení apod.)

      Tady už to zavání řešením atomicity ukládání a nějakým zamykáním entit. To Doctrine nijak neřeší. Jinak kontrolu, zda nějaký uživatel může upravit nějakou hodnotu, to si člověk musí napsat sám.

Napsat komentář

Tato diskuse je již příliš stará, pravděpodobně již vám nikdo neodpoví. Pokud se chcete na něco zeptat, použijte diskusní server Devel.cz

Zdroj: https://www.zdrojak.cz/?p=3294