如何读取ActiveJDBC的Job模型中SQL查询生成的虚拟属性distance
解决方案
方式1:直接调用Model内置通用取值方法
无需修改现有Job类代码,ActiveJDBC的Model天生支持读取查询返回的任意列,不需要提前在模型中定义对应属性或getter:
// 通用方法返回Object类型 Object distanceObj = job.get("distance"); // 已知distance为数值类型时可以直接用类型化取值方法 Double distance = job.getDouble("distance");
注意取值时传入的字段名要和SQL中别名的大小写完全匹配,避免因数据库大小写规则导致取值失败。
方式2:在Job类中新增便捷getter
如果需要和其他原有属性保持一致的调用风格,可以直接在Job类中新增getDistance方法,不需要修改数据库表结构,也不需要定义对应的setter:
public class Job extends Model { // 原有getTitle、setTitle等方法保持不变 // 仅新增getter即可,不需要对应表字段 public Double getDistance() { return getDouble("distance"); } }
添加后就可以直接调用job.getDistance()获取距离值。
歧义报错原因说明
你之前给jobs表添加distance字段后报ORDER BY "distance" is ambiguous错误,是因为SQL中的select *会读取表中已经存在的distance字段,同时你又通过计算生成了别名也为distance的动态列,数据库执行排序时无法判断要使用哪一个列,才会抛出歧义错误。动态计算的虚拟属性本身不需要持久化存储,删掉表中的distance字段即可解决该报错。
内容的提问来源于stack exchange,提问作者Jack Tang
相关产品推荐
相关产品推荐

