Grails按条件查找现有记录

Grails按条件查找现有记录,grails,hql,hibernate-criteria,grails-domain-class,Grails,Hql,Hibernate Criteria,Grails Domain Class,我有两个域类: class Course { String name ... } class Round { Course course String startweek // e.g. '201504' String endweek // e.g. '201534' String applcode // e.g. 'DA542133' ... } 应用程序代码可以在多个场合发布,然后与“应用程序代码”连接,用空格分隔。由于我正在以XML格式对来自不同来源的

我有两个域类:

class Course {
  String name
  ...
}

class Round {
  Course course
  String startweek // e.g. '201504'
  String endweek   // e.g. '201534'
  String applcode  // e.g. 'DA542133'
  ...
}
应用程序代码可以在多个场合发布,然后与“应用程序代码”连接,用空格分隔。由于我正在以XML格式对来自不同来源的大量数据进行流式处理和解析,我可能会偶然发现来自多个来源的相同数据,因此我会查找数据库中的记录,看看是否可以丢弃流的其余部分。这是可能的,因为最外层的标记包含声明上述声明属性的数据。我使用以下方法搜索数据库:

def c = Course.findByName(name);
def found =
 Round.findByCourseAndStartweekAndEndweekAndApplcodeLike(c, sw, ew,'%'+appc+'%')
其中的参数非常明显,而且效果很好,但我发现这些“findByBlaAndBlablaAnd…”很长,可读性不强。我在这里的目的是找到一些更可读,从而更容易理解的方法。我已经开始阅读Criteria和HQL,但我认为一两个例子会对我有所帮助

阅读@injecteer提供的链接上的页面后进行编辑:

上面的查询相当简单。我还有更糟糕的事情要解决,但我的示例中的查询变成了条件:

def found = Round.createCriteria().get {
  eq   ('course', c)
  eq   ('startweek', sw)
  eq   ('endweek', ew)
  like ('applcode',  '%'+appc+'%')
};

比原来的问题更容易阅读和理解。

省去麻烦,开始大量使用命名查询:您在哪里查找hql和criteria的示例?在Thank you@injecteer上有很多例子,如上所述,我刚刚开始阅读,你的链接非常简单。