java enum mybatis_java – MyBatis将属性映射到错误的枚举

作者探讨了在升级到MyBatis 3.4.x(包括3.4.0和3.4.4)时遇到的问题,即如何正确地将枚举类型映射到数据库中的`ProgrammedStatus`属性,导致的`IllegalArgumentException`和`UnrelatedEnum`错误。文章详述了问题出现的原因,并提出了可能的解决策略,如自定义TypeHandler和保持代码一致性的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我的域类具有映射到枚举的属性.奇怪的是MyBatis 3.4.x(3.4.0和3.4.4.这适用于3.3.x),

Spring MyBatis 1.3.1试图用不相关的enum映射它并给出错误.

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.result.ResultMapException: Error attempting to get column ‘order_line_programmed’ from result set. Cause: java.lang.IllegalArgumentException: No enum constant 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;

}

正是这个编程的状态映射到编程列,如下所示,

javaType="java.lang.Boolean" typeHandler="org.apache.ibatis.type.BooleanTypeHandler" />

notNullColumn="order_line_product_id"

resultMap="foo.repository.mapper.ProductMapper.productResult" />

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

很少有可能有用的信息,

> UnrelatedEnum也是一个简单的Enum as ProgrammedStatus

> Product有一个属性,其属性类型为UnrelatedEnum

我在其他代码处也发现了这个问题.我可以在这里使用我自己的特定typeHandler而不是EnumTypeHandler.问题是这个枚举匹配在我的程序中的很多地方使用,并且迁移机智3.4使我的程序不稳定.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值