Ahoj
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 ...
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 ...
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