主题:@EnumMapping注解bug

黑洞里 2018年12月24日 52

枚举类头注解:

@EnumMapping(EnumMapping.EnumType.ORDINAL)

使用枚举作为模型属性,模型新增修改能正常执行,但single查询时,映射错误,代码:

Object value = handler.getValue(tp);

获取到的value由于数据库存的 0 ,value竟然等于false,而非枚举常量。导致:

this.callSetter(bean, prop, value,propType);

报出值转换错误。

黑洞里 2018年12月24日

Cannot set ENUM status: Convert to NULL for value false

黑洞里 2018年12月25日
private void initHandlers(){
		handlers.put(BigDecimal.class,bigDecimalHandler);
		handlers.put(Boolean.class,booleanDecimalHandler);
		handlers.put(byte[].class,byteArrayTypeHandler);
		handlers.put(byte.class,byteTypeHandler);
		handlers.put(Byte.class,byteTypeHandler);
		handlers.put(char[].class,charArrayTypeHandler);
		handlers.put(java.util.Date.class,dateTypeHandler);
		handlers.put(Double.class,doubleTypeHandler);
		handlers.put(double.class,doubleTypeHandler);
		handlers.put(Float.class,floatTypeHandler);
		handlers.put(float.class,floatTypeHandler);
		handlers.put(Integer.class,integerTypeHandler);
		handlers.put(int.class,integerTypeHandler);
		handlers.put(Long.class,longTypeHandler);
		handlers.put(long.class,longTypeHandler);
		handlers.put(Short.class,shortTypeHandler);
		handlers.put(short.class,shortTypeHandler);
		handlers.put(java.sql.Date.class,sqlDateTypeHandler);
		handlers.put(SQLXML.class,sqlXMLTypeHandler);
		handlers.put(String.class,stringTypeHandler);
		handlers.put(Timestamp.class,timestampTypeHandler);
		handlers.put(Time.class,timeTypeHandler);
		handlers.put(Clob.class,clobTypeHandler);
		handlers.put(Blob.class,blobTypeHandler);
		
	}

这个对象也没办法扩展···,直接写在代码里的。

黑洞里 2018年12月25日

在论坛中找到了一个解决方案,但我个人觉得,可能还不够严谨。

点击查看

闲大赋 2018年12月26日

枚举类型在beetlsql中可以通过注解来自持定义转化吧 @EnumMapping

@EnumMapping("value")
public enum Color { 
   RED("RED",1),BLUE ("BLUE",2);
   private String name;  
   private int value;
   private Color(String name, int value) {  
       this.name = name;  
       this.value = value;  
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public int getValue() {
      return value;
   }
   public void setValue(int value) {
      this.value = value;
   }  

这样,会调用value来将枚举转化为具体(int)值,你的例子里,EnumMapping(EnumMapping.EnumType.ORDINAL) 我不是看的太懂为什么这么写