Java 如何在hibernate查询中将嵌套属性用作命名参数?
我确实希望在hibernate查询中使用嵌套属性作为命名参数。 所以我可以更优雅地维护我的param bean 例如,我想编写我的HQL,如下所示:Java 如何在hibernate查询中将嵌套属性用作命名参数?,java,sql,hibernate,parameters,param,Java,Sql,Hibernate,Parameters,Param,我确实希望在hibernate查询中使用嵌套属性作为命名参数。 所以我可以更优雅地维护我的param bean 例如,我想编写我的HQL,如下所示: "...... where employee.age >= :age.min and employee.age <= :age.max and employee.name = :name" "...... where employee.age >= :ageMin and em
"......
where
employee.age >= :age.min
and
employee.age <= :age.max
and
employee.name = :name"
"......
where
employee.age >= :ageMin
and
employee.age <= :ageMax
and
employee.name = :name"
它使用参数bean上的getter方法,因此无法检索嵌套属性
为了访问嵌套属性,我必须在param bean中创建大量委托方法:
public int getAgeMin() {
return this.age.getMin();
}
public int getAgeMax() {
return this.age.getMax();
}
并编写HQL,如下所示:
"......
where
employee.age >= :age.min
and
employee.age <= :age.max
and
employee.name = :name"
"......
where
employee.age >= :ageMin
and
employee.age <= :ageMax
and
employee.name = :name"
“。。。。。。
哪里
employee.age>=:ageMin
和
employee.age=:年龄\分钟
和
employee.age不如改用:
这与嵌套过滤参数非常接近。我为什么需要它
这不仅是“选择”的问题,而且也发生在
“删除”、“更新”
如果我需要编写一个非常复杂的查询,我更喜欢HQL,但不喜欢
标准
嵌套参数Bean/嵌套属性使我能够维护
param bean更优雅。例如,我有一个类:
[ValueRange>],它有4个属性:
公共类ValueRange{
私家侦探;
私有布尔includeMin;
私人T最大值;
私有布尔includeMax;
.....
}
我喜欢使用这个容器Bean来表示所有ValueRange条件,比如:
where
....
employee.birthDate >= :dateRange.min
and
employee.birthDate <= :dateRange.max
....
employee.salary >= :salaryRange.min
and
employee.salary <= :salaryRange.max
在哪里
....
employee.birthDate>=:dateRange.min
和
employee.birthDate=:salaryRange.min
和
员工工资
Age age = ...;
Employee employee = new Employee();
employee.setAge(age);
Example example = Example.create(employee);
List results = session.createCriteria(Employee.class)
.add(example)
.list();
public class ValueRange<T extends Comparable<T>> {
private T min;
private boolean includeMin;
private T max;
private boolean includeMax;
.....
}
where
....
employee.birthDate >= :dateRange.min
and
employee.birthDate <= :dateRange.max
....
employee.salary >= :salaryRange.min
and
employee.salary <= :salaryRange.max
where
....
employee.birthDate >= :dateRange.min
and
employee.birthDate <= :dateRange.max
....
employee.salary >= :salaryRange.min
and
employee.salary <= :salaryRange.max
....
employee.department.code = :department.code
and
employee.department.name = :department.name