2016-08-29 3 views
2

У меня проблема с отображением MyBatis. У меня есть класс домена, как это:MyBatis - не найдено ни одного конструктора

public class MyClass 
{ 
    private Long id; 
    private Date create; 
    private String content; 

    MyClass (Long id, Date create, String content) 
    { 
     this.id = id; 
     this.create = create; 
     this.content = content; 
    } 

    //getters and setters 

Класс сопоставителя с методом, как это:

@Select("SELECT * FROM MyTable WHERE id=#{id}") 
    MyClass getMyClass (@Param("id") Long id); 

В базе данных три столбца имеют тип Number, Timestamp и CLOB и имеют тот же имя как в полях класса.

Когда я использую этот метод, я получаю: ExecutorException: конструктор не найден в [MyClass; соответствия [java.math.BigDecimal, java.sql.Timestamp, oracle.jdbc.OracleClob]

Но если я удалить конструктор из MyClass, то нет никаких проблем на всех. Я хотел бы иметь конструктор, как я могу его исправить? я попытался добавить аннотацию @Results в картографе, как это так, но это не имеет никакого значения:

@Results(value = { 
     @Result(column = "id", property = "id", javaType = Long.class), 
     @Result(column = "create", property = "create", javaType = Date.class), 
     @Result(column = "content", property = "content", javaType = String.class) 
    }) 

ответ

12

MyBatis ожидает ваши объекты модели, чтобы иметь конструктор без аргументов (и, возможно, сеттеров для каждого отображаемого поля). Добавьте те, и все должно работать.

+0

Да, я был отсутствующий пустой конструктор. Я добавил его, и все работает нормально. Я соглашусь через несколько минут, это еще не позволяет мне делать это. – enkara

+0

Ты спас мне жизнь. Я пропустил пустой конструктор. – mainframer

1

Вы можете использовать @ConstructorArgs вместо следующим образом:

@ConstructorArgs({ 
    @Arg(column = "id", javaType = Long.class) 
    ,@Arg(column = "create", javaType = Date.class) 
    ,@Arg(column = "content", javaType = String.class) 
}) 
Смежные вопросы