【发布时间】:2017-03-30 10:19:39
【问题描述】:
我在我的项目中使用 QueryDSL 来返回 Person groupBy LastName 的列表,并且没有具有该 lastName 的人的列表。下面是Person.java
@Entity
class Person {
private String firstName;
private String lastName;
private boolean isCitizen;
private int age;
private int groupByCount; //Property to return groupByCount - could use Group tuple for this, but doing a research trying to set it as an object field.
//Constructors to support n! ways of object creation - where n is no of fields in the object
public Person(String lastName, int groupByCount){
this.lastName = lastName;
this.groupByCount = groupByCount;
}
public Person(int age, int groupByCount){
this.age = age;
this.groupByCount = groupByCount;
}
public Person(boolean isCitizen, int groupByCount){
this.isCitizen = isCitizen;
this.groupByCount = groupByCount;
}
// keeps going to cover all possible constructors - i want to avoid this for maintainability reasons - want to be able to build objects dynamically with different parameters
//Below is code for Getter and setters for above fields
}
使用这些构造函数的 QueryDSL 查询如下。
personRepo.getQueryDSL().createQuery(person).groupBy(person.lastName)
.list(Projections.constructor(Alarm.class, person.lastName, person.count());
personRepo.getQueryDSL().createQuery(person).groupBy(person.age)
.list(Projections.constructor(Alarm.class, person.age, person.count());
personRepo.getQueryDSL().createQuery(person).groupBy(person.isCitizen)
.list(Projections.constructor(Alarm.class, person.isCitizen, person.count());
如何避免写那些 n!使用 QueryDSL 的具有 n 个字段的类的构造函数?在删除 Person 类中的构造函数后,我尝试了 Projections.bean,如下所示
personRepo.getQueryDSL().createQuery(person).groupBy(person.isCitizen)
.list(Projections.bean(Alarm.class, person.isCitizen, person.count());
它抱怨 .count() 不是一个有效的表达式。值得注意的是,将 count 的值分配给 person 对象中的 groupByCount 字段。如何使用 Projections.bean 方法设置具有 person.count() 值的 person 对象的 groupByCount ??
提前致谢。非常感谢您的帮助。
【问题讨论】:
标签: java spring-boot orm jpql querydsl