NutzCN Logo
问答 如何控制nutzdao实体中特殊类型字段的持久化?
发布于 2545天前 作者 qq_ef6310b4 1860 次浏览 复制 上一个帖子 下一个帖子
标签:
    @Column
    @ColDefine(width = 400)
    private Map<Integer, Integer> activityRank; 

日常中发现的问题:
如上面的实体bean中的属性 activityRank,若数据为“{1:2,3:4}”,持久化(dao.update或dao.insert)到数据库,会自动toJson变成“{“1”:2,"3":4}”,而query出来的 activityRank 字段,并不会自动toObject转换成功,因为此map的key为String类型。所以在遍历的时候,会报错。

求问:
1、那么请问,如何控制实体中特殊字段的 toJson 和 toObject 呢?

8 回复

key改成String才是正路

@ColDefine有适配器设置

所以这个toJson和toObject不能控制么......

toJson支持的非String的可以,要用最新版

您看,这样的字段:

    // 活动
    @Column
    @ColDefine(width = 400,adaptor=IntegerMapAdapter.class)
    private String activityRank;

然后,配合如下的适配器,可以解析map么

public class IntegerMapAdapter implements ValueAdaptor {

    @Override
    public Object get(ResultSet rs, String colName) throws SQLException {
        String value = rs.getString(colName);
        @SuppressWarnings("unchecked")
        Map<Integer, Integer> map = JSON.parseObject(value, Map.class);
        return map;
    }

    @Override
    public void set(PreparedStatement stat, Object obj, int index) throws SQLException {
        stat.setString(index, JSON.toJSONString(obj));
    }
}

经测试,是可以的,感谢兽总!

得判断一下null吧

添加回复
请先登陆
回到顶部