NutzCN Logo
问答 自定义sql获取不到对象全部值
发布于 2098天前 作者 lalala 2142 次浏览 复制 上一个帖子 下一个帖子
标签:

自定义sql中使用了如下写法

 for (Record re : list) {
                obj = re.toEntity(this.dao().getEntity(t));
                pagerList.add((T) obj);
            }

BO对象如下,方便返回查询,新增了冗余字段如下

  @Column
    private String x;
  @Column
    private String y;
 

    private String z;

查询出来 x,y都有值,z没有值。
debug看是在如上循环没了,请问要解决这个问题呢

22 回复

加个@Readonly注解

或者用Record的toPojo方法

toPojo也没有? 是不是根本就没有啊

需要怎么改,, 我这样写报错了

obj = re.toPojo(this.dao().getEntity(t).getClass());

obj = re.toPojo(t);

@wendal
这样子的话 有个问题不知道可不可解决
如果定义了一个vo ,参数为如下

  @Column("user_id")
    private String UserId;
  @Column
    private String address;
    private String cityAddress;

因为第三个为cityAddress 驼峰写法,数据库也使用这个驼峰别名,
在进行这方法的时候 自动就编写下划线的形式(city_address),导致cityAddress并不能赋值出来,

第一次接触 望回复一下啊

这样试试

    @Column("user_id")
    private String UserId;
    @Column
    private String address;
    @Column("city_address")
    @ReadOnly
    private String cityAddress;

然后用record.toEntity方法

我在数据库并没有这个字段cityAddress, 这个是多表查询的时候另外加的, 只为了查询用的

额, 要不你做个子类吧...

子类也一样啊,,主要是 父类有id,如下

@Id
private String id;

子类,类似如下

private String cityName;
private String countyName;

结果查询出来 只有id有值,因为他的驼峰转换就是这样,这个无解?

子类加@Column来设置命名呀

如果是比较新的版本, 可以这样写 @Column(hump=true)

不是 子类cityName,countyName是别的表的东西, 我是把这两个当成查询返回参数,写在这个对象里面 ,不可以使用@Column
类似这样。

    @Column("user_id")
    private String UserId;
    @Column
    private String address;
    @Column("city_address")
    
    private String cityAddress;
    private String countyAddress;

只有这个两个字段没有值

看了一下 因为驼峰的原因, 自定义sql有别名了 cityAddress了 还是映射不了, 如果用数据库里面的字段city_address就有值了,但是我们查询都是驼峰写法

要么单独设置这两个属性,要么单独做个pojo

你不是得到Record对象啦吗? 有get方法呀

Record类是个map

    /**
     * 自定义查询,并返回当前实体类对象
     *
     * @param sql
     * @return
     */
    public List<T> listEntity(Sql sql) {
        sql.setEntity(getEntity());
        sql.setCallback(Sqls.callback.entities());
        this.dao().execute(sql);
        return sql.getList(getEntityClass());
    }
添加回复
请先登陆
回到顶部