Hello,
I am registering a type handler in code, like so:
for (Class mapper : mappers) {
configuration.addMapper(mapper);
}
configuration.getTypeHandlerRegistry().register(FieldType.class, new ForgivingEnumTypeHandler<FieldType>(FieldType.class));
final SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
return builder.build(configuration);
(This type handler returns null if the value in the column cannot be coerced to a value of the enum.)
In my mapper, we have:
<resultMap id="column" type="com.xxx.Column">
<result column="id" property="id"/>
...
<collection property="fieldTypes" ofType="com.xxx.FieldType"
column="id" select="getFieldTypesForColumn"/>
</resultMap>
<!-- mapping table for column <-> field types -->
<select id="getFieldTypesForColumn" parameterType="int" resultType="com.xxx.FieldType">
...
</select>
However, when this is run, I get the exception:
[INFO] Caused by: java.lang.IllegalArgumentException: No enum const class us.catalist.iotool.model2.FieldType.some legacy junk
[INFO] at java.lang.Enum.valueOf(Enum.java:196)
[INFO] at org.apache.ibatis.type.EnumTypeHandler.getNullableResult(EnumTypeHandler.java:26)
[INFO] at org.apache.ibatis.type.EnumTypeHandler.getNullableResult(EnumTypeHandler.java:8)
[INFO] at org.apache.ibatis.type.BaseTypeHandler.getResult(BaseTypeHandler.java:29)
[INFO] at org.apache.ibatis.executor.resultset.FastResultSetHandler.getPropertyMappingValue(FastResultSetHandler.java:267)
[INFO] at org.apache.ibatis.executor.resultset.FastResultSetHandler.applyPropertyMappings(FastResultSetHandler.java:250)
[INFO] at org.apache.ibatis.executor.resultset.FastResultSetHandler.getRowValue(FastResultSetHandler.java:224)
[INFO] at org.apache.ibatis.executor.resultset.FastResultSetHandler.handleRowValues(FastResultSetHandler.java:173)
[INFO] at org.apache.ibatis.executor.resultset.FastResultSetHandler.handleResultSet(FastResultSetHandler.java:146)
[INFO] at org.apache.ibatis.executor.resultset.FastResultSetHandler.handleResultSets(FastResultSetHandler.java:112)
[INFO] at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:40)
Why is the statement not picking up the registered handler?
Thanks