问题描述
Java在使用mybatis-plus时,使用枚举类查询时遇到了问题。
完整报错信息
Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: Error attempting to get column 'alarm_level' from result set. Cause: java.sql.SQLFeatureNotSupportedException
解决办法
枚举类示例
package com.changkong.monitor.domain.alarm;
import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.ToString;
import java.util.Objects;
import java.util.stream.Stream;
/**
* 告警级别
*/
@Getter
@ToString
@AllArgsConstructor
public enum AlarmLevel {
WARN(1, "警告"),
HIGH(2, "严重"),
DISASTER(3, "灾难");
private Integer code;
private String description;
public static AlarmLevel of(Integer code) {
Objects.requireNonNull(code);
return Stream.of(values())
.filter(bean -> bean.getCode().equals(code))
.findAny()
.orElseThrow(
() -> new IllegalArgumentException(code + " not exists")
);
}
}
实体类
package com.changkong.monitor.domain.alarm;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import java.io.Serializable;
/**
* 告警规则
*/
@TableName(value ="alarm_rule")
@Data
public class AlarmRule extends BaseEntity implements Serializable {
/**
* id
*/
@JsonSerialize(using = ToStringSerializer.class)
@TableId(type = IdType.AUTO, value = "id")
private Long id;
/**
* 关联资源id
*/
@TableField(value = "reference_id")
private String referenceId;
/**
* 关联资源类型
*/
@TableField(value = "reference_type")
private String referenceType;
/**
* 关联资源名称
*/
@TableField(value = "reference_name")
private String referenceName;
/**
* 监控项ID
*/
@TableField(value = "monitor_item_id")
private Long monitorItemId;
/**
* prometheus表达式
*/
@TableField(value = "promql")
private String promQL;
/**
* 运算符
*/
@TableField(value = "operator")
private AlarmOperator operator;
/**
* 阈值
*/
@TableField(value = "threshold")
private String threshold;
/**
* 告警级别
*/
@TableField(value = "alarm_level")
private AlarmLevel alarmLevel;
}