首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将db项映射到java enum

无法将db项映射到java enum
EN

Stack Overflow用户
提问于 2014-07-24 12:13:09
回答 1查看 1.9K关注 0票数 1

在Spring应用程序中,我在使用mybatis (v3.1.1)从DB中获取条目时,得到了以下错误。

它与字符串(用于保存db中的值)到enum (用于映射)的映射有关。

堆栈跟踪如下:

代码语言:javascript
复制
List com.expertly.service.TransactionLogServiceImpl.getTransactionLogs(ActionType) threw org.apache.ibatis.exceptions.PersistenceException: 
    ### Error querying database.  Cause: java.lang.IllegalArgumentException: No enum const class com.expertly.common.model.reports.TransactionState.COMMITTED 
    ### The error may exist in com/expertly/data/mapper/TransactionLogMapper.java (best guess)
    ### The error may involve com.expertly.data.mapper.TransactionLogMapper.getTransactionLogs-Inline
    ### The error occurred while setting parameters
    ### SQL: SELECT id, transactionstate AS "transactionState", sessionid AS "userSession.sessionId" FROM transactionlog WHERE actioncode = 'VIEW_USER'

Caused by: java.lang.IllegalArgumentException: No enum const class com.expertly.common.model.reports.TransactionState.COMMITTED 
    at java.lang.Enum.valueOf(Enum.java:196) ~[na:1.6.0_38]
    at org.apache.ibatis.type.EnumTypeHandler.getNullableResult(EnumTypeHandler.java:43) ~[mybatis-3.1.1.jar:3.1.1]
    at org.apache.ibatis.type.EnumTypeHandler.getNullableResult(EnumTypeHandler.java:23) ~[mybatis-3.1.1.jar:3.1.1]

我的地图功能:

代码语言:javascript
复制
@Select("SELECT id, transactionstate AS \"transactionState\", sessionid AS \"userSession.sessionId\" "+
    "FROM transactionlog WHERE actioncode = #{actionType} ")
List<TransactionLog> getTransactionLogs(@Param("actionType") ActionType actionType) throws TransactionLogMapperException;

TrsnacationLog类有以下成员:

代码语言:javascript
复制
private int id;
private UserSession userSession;
private ActionType actionType;
private TransactionState transactionState;
private String paramValue;
private Timestamp startTime;
private Timestamp endTime;

ActionType枚举如下:

代码语言:javascript
复制
package com.expertly.common.model.reports;

import java.io.Serializable;

import com.google.gwt.user.client.rpc.IsSerializable;

public enum TransactionState implements Serializable, IsSerializable{
    STARTED("STARTED"),
    COMMITTED("COMMITTED"),
    FAILED("FAILED");

    private final String state;

    TransactionState(String state){
        this.state = state;
    }

    @Override
    public String toString(){
        return state;
    }
}

请让我知道出了什么问题,我怎样才能解决这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-24 13:26:44

请检查从DB获得的字符串中是否有空格。这应该是唯一的差异,因为没有看到任何排字。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24933378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档