To už jsme vyřešili, myslel jsem si že Hibernate používá přetížené
settery pro sledování změn - což není pravda, s něčím jsem si to
spletl...
Nicméně je potřeba počítat s tím že při práci s Hibernate se proxy
může objevit a že tato proxy může být odvozena od deklarovaného
předka, i když uvnitř je
Zdravim konferenciu,
mam v hibernate nasledovne objekty:
objekt Customer :
@Entity
@Table(name=customer)
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = customer_type,
discriminatorType=DiscriminatorType.STRING)
public abstract class Customer extends BaseObject
] On Behalf Of Ivan Polak
Sent: Thursday, March 11, 2010 12:47 PM
To: Java
Subject: hibernate a instanceOf
Zdravim konferenciu,
mam v hibernate nasledovne objekty:
objekt Customer :
@Entity
@Table(name=customer)
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn
dostanes nejakeho jejich potomka.
-Original Message-
From: konference-boun...@java.cz
[mailto:konference-boun...@java.cz] On Behalf Of Ivan Polak
Sent: Thursday, March 11, 2010 12:47 PM
To: Java
Subject: hibernate a instanceOf
Zdravim konferenciu,
mam v hibernate nasledovne objekty
Ne často, vždy :-)
Je to základní princip fungování Hibernate.
to bych nerekl, ze vzdycky vraci proxy. IMHO pouze pokud je to potreba
napr. lazy loading.
--
S pozdravem Roman Dagi Pichlik
/* http://www.sweb.cz/pichlik/ Blog pro kodery */
ano, lazy loading je v aplikacii zapnuty.
Ivan
2010/3/11 Roman Pichlík roman.pich...@gmail.com:
Ne často, vždy :-)
Je to základní princip fungování Hibernate.
to bych nerekl, ze vzdycky vraci proxy. IMHO pouze pokud je to potreba
napr. lazy loading.
--
S pozdravem Roman Dagi Pichlik
/*
Pokud si dobře pamatuji, tak tímto způsobem i sleduje, zda a kdy (a
jak) se změnily hodnoty, aby je pak uložil.
Každopádně, ještě bych dodal: původní tazatel udělal chybu v tom, že
za dynamickou obdobu operátoru instanceof považoval Class.isInstance,
což je špatně (správně je
podla rady som uvedeny riadok :
returnValue = Class.forName(className).isInstance(o);
zmenil na:
returnValue = o.getClass().isAssignableFrom(Class.forName(className));
ako som uviedol className je premenna typu String s hodnotou
com.project.Shipper
a Objekt o je cez Hibernate vytiahnuty objekt
Pokud si dobře pamatuji, tak tímto způsobem i sleduje, zda a kdy (a
jak) se změnily hodnoty, aby je pak uložil.
ne nesleduje. Session si drzi vlastni snapshot proti kteremu se dela
diff. Jeste jedna z metod na Session vraci proxy a to je load. Diky
tomu je mozne udelat perf. optimalizaci
a zabudol som napisat ze to nepomohlo :-(
Ivan
2010/3/11 Ivan Polak ivan.po...@f4s.sk:
podla rady som uvedeny riadok :
returnValue = Class.forName(className).isInstance(o);
zmenil na:
returnValue = o.getClass().isAssignableFrom(Class.forName(className));
ako som uviedol className je
Nemuzete to prevest na rozhodnovani dle hodnoty discriminatoru?
Ten si muzete namapovat jako vlastnost Custommera (update=false, insert=false)
a nasledne provadet testy podle hodnoty teto vlastnosti.
Pouzivat instanceofy a spol., navic v prostredi prolezlem
proxynama, zejmena na dedicne strukture
Pro kolekce to pomoci tech proxy sleduje - a lze se dostat do zajimavych
problemu, kdyz mu tu proxy na kolekci prepiseme.
Proxy tam nebudou, pokud to zakazeme, nebo pokud se jedna o instance
nenactene pomoci Hibernatu - at uz asociovane k session dodatecne, nebo
takove, ktere dosud nejsou
ano samozrejme mozem, len ma zaujimalo preco to nefunguje. urobil som to tak.
dakujem
Ivan
2010/3/11 Vaclav Stumbauer stum...@gmail.com:
Nemuzete to prevest na rozhodnovani dle hodnoty discriminatoru?
Ten si muzete namapovat jako vlastnost Custommera (update=false, insert=false)
a nasledne
Pozor na pořadí:
A instanceof B == B.class.isAssignableFrom(A.getClass())
ALE
Podíval jsem se na to pořádně a musím si posypat popel na hlavu:
problém je někde úplně jinde a isInstance by dokonce bylo správně.
Problém je ve skutečnosti v tom, že Hibernate vytvoří proxy pro
Customer, i když
A co vlastne vraci o.getClass()?
-Original Message-
From: konference-boun...@java.cz
[mailto:konference-boun...@java.cz] On Behalf Of Ivan Polak
Sent: Thursday, March 11, 2010 1:54 PM
To: Java
Subject: Re: hibernate a instanceOf
ano samozrejme mozem, len ma zaujimalo preco
15 matches
Mail list logo