Java QueryDSL 3.6.0 Projection.bean(Person.class, person.firstName, person.count())
Java QueryDSL 3.6.0 Projection.bean(Person.class, person.firstName, person.count())
我在我的项目中使用 QueryDSL 来 return 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 个字段的 class 的构造函数 ??在删除 Person class
中的构造函数后,我尝试了如下所示的 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 ??
提前致谢。非常感谢您的帮助。
我相信 Projections.fields
就是您要找的。让 POJO 中的 setter 名称反映查询中的列名称 - 看起来您已经准备好了。
我将 .count 之上的 .as 方法链接到 groupByCount 属性,如下所示。这样我就可以避免写 n!构造函数。
personRepo.getQueryDSL().createQuery(person).groupBy(person.isCitizen)
.list(Projections.bean(Alarm.class, person.isCitizen,
person.count().as(person.groupByCount));
我在我的项目中使用 QueryDSL 来 return 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 个字段的 class 的构造函数 ??在删除 Person class
中的构造函数后,我尝试了如下所示的 Projections.beanpersonRepo.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 ??
提前致谢。非常感谢您的帮助。
我相信 Projections.fields
就是您要找的。让 POJO 中的 setter 名称反映查询中的列名称 - 看起来您已经准备好了。
我将 .count 之上的 .as 方法链接到 groupByCount 属性,如下所示。这样我就可以避免写 n!构造函数。
personRepo.getQueryDSL().createQuery(person).groupBy(person.isCitizen)
.list(Projections.bean(Alarm.class, person.isCitizen,
person.count().as(person.groupByCount));