首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Querydsl Projection.bean找不到setter

Querydsl Projection.bean找不到setter
EN

Stack Overflow用户
提问于 2018-06-19 15:15:45
回答 1查看 1.1K关注 0票数 0

假设City和CityDTO为

代码语言:javascript
运行
复制
@Entity
public class City {
    private Long id;
    private String name;
    @Column(name="id")
    public Long getId(){ 
        return this.id;
    }
    public City setId(Long id) {
        this.id = id;
        return this;
    }
    @Column(name="name")
    public String getName(){ 
        return this.name;
    }
    public City setName(String name) {
        this.name = name;
        return this;
    }
    @Transient
    public String anotherInformationToSerializeInJsonButNotPersist() {
        return "this is an example of some functions that we have inside entities";
}

public class CityDTO {
    private Long id;
    private String name;
    private String anotherMuchRelevantInformationDifferentFromEntityTransientOne;
    public Long getId(){ 
        return this.id;
    }
    public CityDTO setId(Long id) {
        this.id = id;
        return this;
    }
    public String getName(){ 
        return this.name;
    }
    public CityDTO setName(String id) {
        this.name = name;
        return this;
    }
    public String getAnotherMuchRelevantInformationDifferentFromEntityTransientOne(){ 
        return this.anotherMuchRelevantInformationDifferentFromEntityTransientOne;
    }
    public CityDTO setAnotherMuchRelevantInformationDifferentFromEntityTransientOne(String anotherMuchRelevantInformationDifferentFromEntityTransientOne) {
        this.anotherMuchRelevantInformationDifferentFromEntityTransientOne = anotherMuchRelevantInformationDifferentFromEntityTransientOne;
        return this;
    }
}

当使用Projection.fields查询一切正常时,返回的QBean具有大小与预期(2)相同的字段列表,具有字段引用的元素(最后,我认为它与预期的一样,例如id字段名为" id ",类型为长,修饰符为2,但fieldAccessor为null),使用fieldAccessor生成的DTO列表中填充了id和名称。

但是,我想使用setter而不是字段,所以我尝试使用Projections.bean。这个投影返回的QBean得到了一个空的字段列表和一个相同大小的列表设置器,但是所有元素都为null,fetch生成的DTO列表带有id和name null (很明显)。

这两个投影都生成一个大小为2的绑定映射,为{"id“-> "city.id","name”“->”city.name;

不知道到底出了什么问题。fieldAccessor是否用于定义setter,并且由于它是空的,则投影无法定义它们?

我使用的是spring框架4最新版本,查询如下所示:

代码语言:javascript
运行
复制
...
QCity qCity = QCity.city;
return new JPAQueryFactory(sessionFactory.getCurrentSession())
    .select(Projections.bean(CityDTO.class, qCity.id, qCity.name)
    .from(qCity)
    .fetch();

有什么想法吗?

编辑:

事实上,对于City.class结果的投影也是一样的.不能使用setter绑定查询中的值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-20 14:51:15

在Robert的评论要求显示getters和setter之后,我意识到我们使用了流利的setters模式,所以我改变了它,并再次用sucess测试了使用Projections.bean进行查询。

如果其他人陷入同样的情况,我将注册一个答案,并向querydsl发出一个问题,以查看API上是否欢迎支持fluet setter。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50931779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档