ktera bere v potaz detekci jiz generovanych objektu a u nich uz se
nepousti do vypisu atributu. Zaroven umi poznat, ze se jedna o
neinicializovany objekt od Hibernate (proxy nebo kolekce) a ty se take
nesnazi vypsat. Tu jsme nakonec pomoci AspectJ dotlacili vsem potrebnym
objektum.
Je otazka, zda neinicializovany objekt vypsat ci nikoli. Ja bych je totiz
naopak videl rad. Odladuji plneni databaze o vic nez 30 tabulkach, jejichz
vazby tvori uplny neplanarni graf (rozklad na BCNF mi vygeneroval 78
tabulek a do toho se mi vazne nechce...)
No my jsem je vypsali a rekli jsme u nich, ze jsou neinicializovane,
protoze kazdopadne nechci, aby mi toString jako side effect tahalo neco z
db ...
Coz ja prave potrebuju, abych mel prehled, co se mi to vlastne v DB udelalo.
Neni to zadna p...., to mi muzete verit.
Pak bych to nedelal metodou toString, ktera se vola vsude mozne, ale udelal bych si na to vlastni metodu, protoze bude
dotahovat veci z DB a tudiz musi byt aktivni sessiona ...
V podstate jsme malinko vylepsili implemtaci z commons-lang, ktera je
zbytecne komplikovana a jenom detekuje cykly, kdezto my jsme chteli, aby
se objekt nezapisoval podruhe i mimo cyklus ...
No i tady je otazka, zda a kdy objekt vypsat dvakrat. Podle mne jsou
situace,
kdy jej v ramoci jednoho toString() vypsat chcete komplet
a kdy chcete jen jeho IDcko... - takze urcite je potreba, aby se vypisoval
alespon dvema zpusoby.
No my jsme si do ThreadLocal ulozil collection, kde se drzi seznam jiz
zapsanych objektu. Pokud v ramci jednoho volani toString objekt zapisuji
poprve, pak jej zapisu cely vcetne jeho podgrafu, pokud jej zapisuju
podruhy, pak zapisu jeho systemovy hash a podle nej si jej muzu dohledat ve
vypise nekde driv ...
Ano, je to jedna moznost. Uz jsem o ni uvazoval, co mi to prinese. Problem
je v tom, ze mi to ukazalo na nutnost drzet si cely graf vypsanych objektu
v pameti, protoze jsou chvile, kdy potrebuju mit TRI ruzne zobrazeni(hash
neni to prave orechove),
Spatne jsem se vyjadril, protoze jsem mel na mysli System.identityHashCode. Pokud je to nutne pouze pro ladeni, pak je
otazka, zda si neudelat nejake specializovane udelatko, kteremu se preda korenovy objekt a on pomoci reflection API
projde cely strom a inteligentne s odsazovanim jej v citelne forme vypise :-)
a to se mi FAKT nechtelo. Ale stejne budu muset neco obdobneho zavest, protoze
potrebuju vypsat k jednomu radku tabulky A radky tabulky D, ke kterym
se dostanu pres tabulky B a C, procemz tabulka B je pouha vazba 1:(0,1) a mohl
bych se tak velice rychle dostat do stavu, kdy budu vypisovat
A->B->(A->B->(A,C),C). Fuj.
A nebo budu vypisovat ty Hashe a napisu si vlastni graficky Renderer :-D
Hmm. To uz muzu zrovna z DB generovat triplety pro nas RDFNavigator, co?
tapik
Takze zustanu u sveho systemu a jdu si hrat s toString() pluginem do
Idei...
Jak se rika, kazdy sveho stesti strujcem. Me se hodne pozdava to napichnuti
do objektu pomoci aspektu, protoze mam definici toString na jednom miste :-)
Zdravim,
chtel bych se zeptat, co pouzivate na logovani Hibernate Entit.
Pokud chci zalogovat jenom literaly, neni co resit.
Problem nastava ve chvili, kdy chci logovat objekt vcetne vazeb.
Pak se velice rychle dostanu pri implementaci pouheho toString() do
zacykleni.
Momentalne pouzivam tri urovne:
* toString(), ktery generuje vystup jak z literalu, tak s vazeb.
Vazby prohani metodou flatToStringA()
* flatToString() generuje syntakticky stejny vystup jako toString()
a to z literalu a vazeb, ktere jsou N:1 a 1:1. Vazby prohani
beanToString()
* beanToString() generuje syntakticky stejny vystup jako toString()
a to pouze z literalu
Tim mam zarucene necykleni vystupu a rozumne maly graf.
Moje otazka zni: existuje nejaky pekny nastroj, ktery umi logovat podobne
inteligentne, nebo si mam napsat plugin do IntelliJ/perlovy skript,
ktery mi
bude sam generovat tyto tri metody? Teda devet, protoze mame i kolekce,
ze,
a protoze ve staticke metode mohu udelat test na null logovaneho
objektu, ze.
Je mi jasne, ze by to slo resit i pres Reflection, ale tak nejak nemam
Reflection moc v lasce a hlavne nevidim presne do Hibernate, abych se tam
nedostal do nejakych velkych problemu, takze se mi do toho tak nejak
nechce...
Dik, tapik
--
Jiří Mareš (mailto:[EMAIL PROTECTED])
ČSAD SVT Praha, s.r.o. (http://www.svt.cz)
Czech Republic
--
Jiří Mareš (mailto:[EMAIL PROTECTED])
ČSAD SVT Praha, s.r.o. (http://www.svt.cz)
Czech Republic
--
Jiří Mareš (mailto:[EMAIL PROTECTED])
ČSAD SVT Praha, s.r.o. (http://www.svt.cz)
Czech Republic