Java MyBatis将属性映射到错误的枚举

Java MyBatis将属性映射到错误的枚举,java,spring,enums,mybatis,spring-mybatis,Java,Spring,Enums,Mybatis,Spring Mybatis,我的域类具有映射到枚举的属性。奇怪的是,MyBatis 3.4.x(3.4.0和3.4.4都使用了3.3.x)和Spring MyBatis 1.3.1尝试将其映射到一个不相关的枚举,并给出了错误 org.mybatis.spring.MyBatisSystemException:嵌套异常为org.apache.ibatis.executor.result.ResultMapException:尝试从结果集中获取列“order\u line\u programmed”时出错。原因:java.la

我的域类具有映射到枚举的属性。奇怪的是,MyBatis 3.4.x(3.4.0和3.4.4都使用了3.3.x)和Spring MyBatis 1.3.1尝试将其映射到一个不相关的枚举,并给出了错误

org.mybatis.spring.MyBatisSystemException:嵌套异常为org.apache.ibatis.executor.result.ResultMapException:尝试从结果集中获取列“order\u line\u programmed”时出错。原因:java.lang.IllegalArgumentException:无枚举常量foo.UnrelatedEnum.yes

我的域类如下所示:

public class OrderLine {

    private Long id;
    private Product product;
    private ProgrammedStatus programmedStatus;
    private String programmedFeedback;
    private boolean completed = false;
}
ProgrammedStatus是一个简单的枚举

public enum ProgrammedStatus {
    yes, no, error;
}
正是该programmedStatus映射到编程列,如下所示

<resultMap id="orderLineResult" type="foo.OrderLine">
    <id property="id" column="technical_order_line_id" />
    <result property="programmedStatus" column="order_line_programmed" typeHandler="org.apache.ibatis.type.EnumTypeHandler" />
    <result property="programmedFeedback" column="order_line_programmed_feedback" />
    <result property="completed" column="order_line_completed"
        javaType="java.lang.Boolean" typeHandler="org.apache.ibatis.type.BooleanTypeHandler" />
    <association property="product"
        notNullColumn="order_line_product_id"
        resultMap="foo.repository.mapper.ProductMapper.productResult" />
</resultMap>

我甚至尝试用typeHandler映射javaType,但MyBatis似乎忽略了它

几乎没有有用的信息

  • UnrelateNum也是一个简单的枚举,如ProgrammedStatus
  • 产品有一个属性,该属性的类型为UnrelateNum

我在代码的其他地方也发现了这个问题。我可以有自己的特定类型处理程序,而不是这里的EnumTypeHandler。问题是,我的程序中很多地方都使用了这种枚举匹配,而使用3.4进行迁移会使我的程序不稳定。

删除明确提到的枚举类型处理程序对我来说很有效

删除:typeHandler=“org.apache.ibatis.type.EnumTypeHandler”



我在mybatis 3.4.5中遇到了同样的问题,降级到3.3.1以解决它。奇怪的是,只有通过一次向上投票才能在so答案中找到信息。从第3.4版到第3.5版的官方Mybatis迁移指南中肯定应该体现这一点
<resultMap id="orderLineResult" type="foo.OrderLine">
    <id property="id" column="technical_order_line_id" />
    <result property="programmedStatus" column="order_line_programmed" />
    <result property="programmedFeedback" column="order_line_programmed_feedback" />
    <result property="completed" column="order_line_completed"
        javaType="java.lang.Boolean" typeHandler="org.apache.ibatis.type.BooleanTypeHandler" />
    <association property="product"
        notNullColumn="order_line_product_id"
        resultMap="foo.repository.mapper.ProductMapper.productResult" />
</resultMap>