Grails:如何通过特定属性检索记录?

时间:2016-10-28 02:09:21

标签: grails

我正在创建一个带有Person实体的基本CRUD应用程序:

class Person {
    public int Age;
    ...
    public int getAge() {
        return this.Age;
    }

    public void setAge(int AgeToSet) {
        this.Age = AgeToSet;
    }
}

我有一个控制器,我想要检索所有年龄为20岁的人:

def filter = {
    def c = Person.createCriteria();
    def persons = c.list{
         eqProperty("Age", "20");
     }
    [persons: persons];
}

但这不起作用,而是给我错误:

ERROR StackTrace - Full Stack Trace:
org.hibernate.QueryException: could not resolve property: Age of: project.Person
    at     org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:62)

可能是什么问题?

2 个答案:

答案 0 :(得分:1)

三件事:

  • 您的Age需要以小写字母开头:age
  • 您的条件有误,您想使用eqeqProperty比较两个属性,但您只需要一个属性和值。
  • 您的比较必须与int相符,如下所示:eq("myage", 20)

答案 1 :(得分:1)

由于此查询非常简单,您可能只想使用DynamicFinder:http://gorm.grails.org/6.0.x/hibernate/manual/index.html#finders

使用动态查找器,您可以将查询简化为:

def persons = Person.findAllByAge(20)

只是一个建议。我使用动态查找器作为我的主要查询方法。如果我需要一个更复杂的查询,我将使用.createCriteria,然后使用.executeQuery来获取HQL。