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 */ >>> >> >