在Spring应用程序中,我在使用mybatis (v3.1.1)从DB中获取条目时,得到了以下错误。
它与字符串(用于保存db中的值)到enum (用于映射)的映射有关。
堆栈跟踪如下:
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]我的地图功能:
@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类有以下成员:
private int id;
private UserSession userSession;
private ActionType actionType;
private TransactionState transactionState;
private String paramValue;
private Timestamp startTime;
private Timestamp endTime;ActionType枚举如下:
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;
}
}请让我知道出了什么问题,我怎样才能解决这个问题。
发布于 2014-07-24 13:26:44
请检查从DB获得的字符串中是否有空格。这应该是唯一的差异,因为没有看到任何排字。
https://stackoverflow.com/questions/24933378
复制相似问题