NutzCN Logo
问答 自定义sql中的字段,在实体内无@Column标识的属性如何获得值
发布于 3046天前 作者 yong9664 2102 次浏览 复制 上一个帖子 下一个帖子
标签:
Sql sql = Sqls.create("select t.*, '测试' as demo_s, '测试字段2' as demo_t from instrument t");
sql.setCallback(Sqls.callback.entities());
sql.setEntity(dao.getEntity(Instrument.class));
dao.execute(sql);
List<Instrument> list = sql.getList(Instrument.class);

Instrument实体内的demo_s和demo_t是无@Column标识的,这两字段如何才能映射到Instrument实体内

7 回复

方法1: 参考QueryEntityCallback写一个Callback, 里面取值然后set到对象中去

方法2: 先用records接收,然后转entity,最后把多出来的字段set到对应属性去

// 示代码
Sql sql = Sqls.create("select t.*, '测试' as demo_s, '测试字段2' as demo_t from instrument t");
sql.setCallback(Sqls.callback.records());
//sql.setEntity(dao.getEntity(Instrument.class));
dao.execute(sql);
List<Record> tmp = sql.getList(Record.class);
List<Instrument> list = new ArrayList<Instrument>();
Entity<Instrument> en = dao.getEntity(Instrument.class);
for (Record re: tmp) {
     Instrument ins = re.toEntity(en);
	 ins.setS(re.getString("demo_s"));
	 ins.setT(re.getString("demo_t"));
	 list.add(ins);
}

@wendal 好吧,需要手动处理

假如我库里有一百个字段,只想拼一个别的字段,用record一个一个set真的太难受了,如果没有column标识的name对上也能映射到实体里就好了o(╥﹏╥)o。。。不知道说明白没有,就很纠结。。。@wendal

方法2并不需要set其他能映射的字段,因为toEntity已经映射了其他字段

来自炫酷的 NutzCN

嗷嗷!看明白了,谢谢!不会艾特@wendal

这个需求真的很实用,希望能在后面的更新中实现

我看了一下,还可以这样实现:

for (Record re: tmp) {
     Instrument ins = re.toPojo(Instrument.class);	
     list.add(ins);
}
添加回复
请先登陆
回到顶部