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ž objekt je ve skutečnosti potomek.

Je to specifický problém Hibernate a řešením je deproxyfikace pomocí
(HibernateProxy)o).getHibernateLazyInitializer().getImplementation(),
případně vypnutí proxy pomocí @Proxy(lazy=false)  (tady je ale otázka
zda to je použitelné...). Více podrobností (a odkazy na další varianty
řešení) na:

http://blog.smart-java.nl/blog/index.php/2010/03/08/hibernate-lazy-loading-and-inheritance/

Kamil Podlešák

PS: Asi si budu muset stáhnout aktuální zdrojáky a podívat se, jakým
způsobem sleduje změny bez proxy, to mě docela zajímá.

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 premenna typu String s hodnotou
> "com.project.Shipper"
> a Objekt o je cez Hibernate vytiahnuty objekt z DB, zobraznene vo
> watch okne: Customer_$$_javassist_145 (...).
>
>
> dakujem
>
> Ivan
>
> 2010/3/11 Kamil Podlesak <kamil.podle...@gmail.com>:
>> 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 Class.isAssignableFrom).
>>
>> Kamil Podlešák
>>
>> 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
>>>
>>> /* http://www.sweb.cz/pichlik/ Blog pro kodery */
>>>
>>
>

Odpovedet emailem