You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@ignite.apache.org by vinsala <vi...@gmail.com> on 2019/03/20 09:47:56 UTC

Int to enum mapping failure

Table A with columns and type
   col      data_type
   name      varchar
   id        bigint
   type      int


data is loaded fine into Cache  when following mapping used for field type

<bean class="org.apache.ignite.cache.store.jdbc.JdbcTypeField">
	<constructor-arg>
		<util:constant static-field="java.sql.Types.INTEGER"/>
	</constructor-arg>
	<constructor-arg value="type"/>
	<constructor-arg value="java.lang.Integer"/>
	<constructor-arg value="type"/>
</bean>


<property name="fields">
	<map>
		<entry key="type" value="java.lang.Integer"/>
		<entry key="name" value="java.lang.String"/>
		<entry key="id" value="java.lang.Long"/>
	</map>
</property>

 But fails with error below if I try to use Enum 


<bean class="org.apache.ignite.cache.store.jdbc.JdbcTypeField">
	<constructor-arg>
		<util:constant static-field="java.sql.Types.INTEGER"/>
	</constructor-arg>
	<constructor-arg value="type"/>
	<constructor-arg value="com.......some.SomeEnum"/>
	<constructor-arg value="type"/>
</bean>

<property name="fields">
	<map>
		<entry key="type" value="com.......some.SomeEnum"/>
		<entry key="name" value="java.lang.String"/>
		<entry key="id" value="java.lang.Long"/>
	</map>
</property>

Caused by: class org.apache.ignite.binary.BinaryObjectException: Failed to
read field [name=type]
	at
org.apache.ignite.internal.binary.BinaryFieldAccessor.read(BinaryFieldAccessor.java:192)
	at
org.apache.ignite.internal.binary.BinaryClassDescriptor.read(BinaryClassDescriptor.java:875)
	... 16 more
Caused by: java.lang.IllegalArgumentException: Can not set
com.......some.SomeEnum field com.bla.bla.A.type to java.lang.Integer
	at
sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
	at
sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)
	at
sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81)

	
public class A implements Serializable {
    private static final long serialVersionUID = 0L;
    private final Long id;
    private int type; // CHANGE This to SomEnum for failure case
    private final String code;
    }
	
enum SomeNum {
   FIRST(1, "FIRSTENUM");
}



--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/