Skip to content

[错误报告]: 字段别名问题 #338

@okou19900722

Description

@okou19900722

确认

  • 我的版本是最新版本, 我的版本号与 version 相同, 并且项目里无依赖冲突
  • 我已经在 issue 中搜索过, 确认问题没有被提出过
  • 我已经修改标题, 将标题中的 描述 替换为遇到的问题

当前程序版本

1.5.4

问题描述

在selectFunc方法,alias使用SFunction时,只使用了 LambdaUtils.getName(alias) 转换成alias,代码如下

default <S, X> Children selectFunc(BaseFuncEnum funcEnum, SFunction<S, ?> column, SFunction<X, ?> alias) {
return selectFunc(funcEnum, column, LambdaUtils.getName(alias));
}

如果我的sql是

wrapper
    .select(XXX::getXxxYxx)
    .from(w -> w.selectFunc(DefaultFuncEnums.SUM, XXX::getXxxYxx))

此时,转换成的sql是

select xxx_yxx from (select sum(xxx_yxx) as xxxYxx) t

很显然子查询中的别名不是 xxx_yyy 而是驼峰的 xxxYxx,导致sql报错。

我尝试复制这个类的代码,使用自己的Wrapper类,并重写这个方法,按处理column的方法,从ColumnCache中获取缓存的字段信息,sql就正确了。

但又有另一个问题,假设我查询时,返回的不是一个entity类的对象,别名也不是entity中的字段(如果刚好重名,用entity类的lambda不存在这个问题),此时ColumnCache中就没有对应信息,如果强行使用ColumnCache就会报错,那只能自己去处理驼峰转下划线。

所以是否可以将alias的处理更智能,按entity的逻辑来缓存到ColumnCache中处理

详细堆栈日志

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions