2016-09-29 2 views
1

Я пытаюсь настроить ENUM TypeHandlers весны mybatis, получая ниже исключения,Невозможно найти полезный конструктор для класса Spring Enum Mybatis исключения

Причина: org.apache.ibatis.type.TypeException: Невозможно найти полезную конструктор для класса com.citi.aw.data.ibatis.KnownTypeHandlers $ PortfolioTypeEnum

SqlConfig.xml

<configuration> 
<typeHandlers> 
    <typeHandler javaType="com.citi.aw.entities.portfolio.PortfolioType" 
     handler="com.citi.aw.data.ibatis.KnownTypeHandlers$PortfolioTypeEnum"/></typeHandlers> 
</configuration> 

PortfolioType Enum

public enum PortfolioType 
{ 
    PROPOSAL, 
    INVESTABLE, 
    MODEL, 
    MODEL_STRATEGY, 
    STRATEGY, 
    CLIENT, 
    FUND_OF_FUND, 
    REFERENCE, 
    MODEL_ALLOCATION  
} 

Class KnownTypeHandlers 
public class KnownTypeHandlers 
    { 
     public static abstract class PortfolioTypeEnum extends OrdinalEnumTypeHandler 
     { 
      public PortfolioTypeEnum() 
      { 
       super(PortfolioType.values()); 
      } 
     } 
} 

Class OrdinalEnumTypeHandler 

    public abstract class OrdinalEnumTypeHandler extends org.apache.ibatis.type.BaseTypeHandler<Object> 
{ 
    private Object[] enumValues; 

    protected OrdinalEnumTypeHandler(Object[] enumValues) 
    { 
     this.enumValues = enumValues; 
    } 

    @Override 
    public Object getResult(ResultSet rs, String columnName) throws SQLException 
    { 
     int intValue = rs.getInt(columnName); 
     return enumValues[intValue]; 
    } 

    @Override 
    public Object getResult(ResultSet rs, int columnPos) throws SQLException 
    { 
     int intValue = rs.getInt(columnPos); 
     return enumValues[intValue]; 
    } 

    @Override 
    public Object getResult(CallableStatement arg0, int arg1) throws SQLException 
    { 
     throw new SQLException("not implemented"); 
    } 

    @SuppressWarnings("unchecked") 
    //@Override 
    public void setParameter(PreparedStatement ps, int pos, Object parameter, String jdbcType) throws SQLException 
    { 
     ps.setInt(pos, ((Enum)parameter).ordinal()); 
    } 

    //@Override 
    public Object valueOf(String stringValue) 
    { 
     return enumValues[Integer.parseInt(stringValue)]; 
    } 
} 

ответ

3

Я думаю, вы используете MyBatis 3. Таким образом, Вам не нужно создавать какие-либо обработчик для перечисления. MyBatis имеет один typehandler для случаев Enum.

С.Е. MyBatis 3 Configuration в справочной документации:

typeHandlers

Всякий раз, когда MyBatis устанавливает параметр на PreparedStatement или возвращает значение из ResultSet, используется TypeHandler для извлечения значение в средстве, соответствующем типу Java. В приведенной ниже таблице описывается тип TypeHandlers по умолчанию.

...

EnumTypeHandler - Перечень Тип - VARCHAR любой строка совместимого типа, так как код хранится (не индекс).

Затем добавьте к вашей конфигурации XML (в вашем случае SqlConfig.xml:

<!-- mybatis-config.xml --> 
<typeHandlers> 
    <typeHandler handler="org.apache.ibatis.type.EnumTypeHandler"/> 
</typeHandlers> 
Смежные вопросы