У меня есть следующее:
public class Stat {
public enum HitType {
MOBILE1(0), MOBILE2(1), DESKTOP(2);
public final int value;
public int value() { return value; }
HitType(int val) {
value = val;
}
public static HitType parseInt(int i) {
switch (i) {
case 0: return MOBILE1;
case 1: return MOBILE2;
case 2: return DESKTOP;
default: return null;
}
}
}
public HitType hitType;
public long sourceId;
public Stat(... int hitType, BigInteger sourceId) {
this.hitType = HitType.parseInt(hitType);
this.sourceId = sourceId.longValueExact();
@Mapper
public interface StatMapper {
@Select("select * from stats where id = #{id}")
@Results(value = {
@Result(property = "hitType", column = "hit_type"),
...
})
public Stat findById(@Param("id") long id);
Stat s = statMapper.findById(1);
response.getOutputStream().print(s.toString());
Все равно выдает эту ошибку:
Устранено исключение, вызванное выполнением обработчика: org.mybatis.spring.MyBatisSystemException: вложенное исключение - org.apache.ibatis.executor.result.ResultMapException: Ошибка при попытке получить столбец hit_type из набора результатов.Причина: java.lang.IllegalArgumentException: нет константы перечисления com.company.app.model.Stat.HitType.2
Я попытался /7497668/privedite-int-dlya-perechisleniya-v-java#7497685 и прочитал Преобразовать целочисленное значение всоответствие Java Enum .
Если я изменю сигнатуру конструктора на
public Stat(..., int hitType, long sourceId) {
this.sourceId = sourceId;
, тогда выдается ошибка
Вложенное исключение org.apache.ibatis.executor.ExecutorException: Нетнайден конструктор в com.company.app.model.Stat, соответствующий [java.math.BigInteger, java.lang.String, java.sql.Timestamp, java.lang.Integer, java.math.BigInteger]
Так что в первом случае кажется, что это может быть установка свойств напрямую, а во втором случае он использует конструктор.
Я попытался поместить HitType hitType
в сигнатуру конструктора, но все равно выдает ошибку No constructor found...
.
MyBatis 3.4.5, MyBatis-Spring 1.3.1, Spring-Boot 1.5+0,13