QueryDSL SQL。 Char Y / N数据库字段为模型中的布尔属性

时间:2016-12-15 11:17:32

标签: java dao querydsl

我正在使用SQL版本的QueryDSL及其代码生成器来构建我的Q-Classes和数据库中相应的Java POJOS。

使用旧数据库(Firebird),我们将一些数据库CHAR(1)列视为布尔,其域名为'Y'和'N'。将这些列投影到我的模型属性以自动映射或将这些Y / N值转换为布尔Java类型时,有什么办法吗?

1 个答案:

答案 0 :(得分:1)

querydsl-sql将返回正在使用的JDBC驱动程序映射的类型。我建议使用Projections.constructor来实例化您的POJO并使用一个返回boolean的getter,如下所示:

List<Pojo> pojos = query
                  .select(Projections.constructor(Pojo.class, qtable.yesNoValue))
                  .fetch();

public class Pojo {

    private final String yesNoValue;

    public Pojo(String yesNoValue) {
        this.yesNoValue = yesNoValue;
    }

    public boolean getYesNoValue() {
        return "Y".equals(yesNoValue);
    }

}

同样,您可以创建com.querydsl.core.types.MappingProjection的具体实例,覆盖protected abstract T map(Tuple row)以使用所需类型实例化您的POJO。