Hi David, Looks like a bug. As a workaround, you can either use optimized marshaller or compare enum ordinal. I've created an issue IGNITE-5087 [1].
[1] https://issues.apache.org/jira/browse/IGNITE-5087 On Mon, Apr 24, 2017 at 10:57 AM, David Li <[email protected]> wrote: > Hi all, > > I encountered something weird about enum value in the object stored in > ignite cache. > > for example: > > class definition: > > public class Application { > private long id; > private String name; > private ApplicationType type; > } > > enum definition: > > public enum ApplicationType { > TX { > @Override > public boolean isSupported() { > return true; > } > }, > API { > @Override > public boolean isSupported() { > return true; > } > }; > > public abstract boolean isSupported(); > } > > then have a cache like: > > IgniteCache<Long, Application> cache > > When get back the Application instance from cache, the value of the type > > property will not equal to the enum value in the enum class, i found their > > hash code is different, even though they have same class name. > > for example, > > Application app = new Application(1L, "app 1", ApplicationType.API); > > app.getType() == ApplicationType.API is true > > app.getType().getClass().getName() is ApplicationType$2, hash code is > 251520863 > > > Application appFound = cache.get(app.getId()); > > appFound.getType() == Application.API is false > > appFound.getType().getClass().getName() is ApplicationType$2, hash code is > 331596257 > > > ApplicationType.API.hashCode() is 251520863 > > > I tried an enum without any method definitions, then no issue. Any idea about > this? > > > BRs, > > David > > > -- Best regards, Andrey V. Mashenkov
