Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
grails 3.3.9应用程序中的条件中的sqlRestriction中的引用列_Grails_Gorm_Criteria_Hibernate Criteria - Fatal编程技术网

grails 3.3.9应用程序中的条件中的sqlRestriction中的引用列

grails 3.3.9应用程序中的条件中的sqlRestriction中的引用列,grails,gorm,criteria,hibernate-criteria,Grails,Gorm,Criteria,Hibernate Criteria,我有两个域名提供和站。我编写了一个条件查询,它将返回离出发站(Offer.origin)25000米范围内的所有报价和所有可能的目的站(Offer.Stations)。它之所以有效,是因为有一个黑客,我想删除它 问题是,我通过查看正在执行的原始SQL获得的表名别名,在sqlRestriction中引用/前缀列名latitude和longitude。它是有效的,但是如果底层ORM实现发生了变化,这段代码当然会中断 我尝试使用createAlias()引用纬度和经度,但这不起作用,因为它们超出了sq

我有两个域名提供和站。我编写了一个条件查询,它将返回离出发站(Offer.origin)25000米范围内的所有报价和所有可能的目的站(Offer.Stations)。它之所以有效,是因为有一个黑客,我想删除它

问题是,我通过查看正在执行的原始SQL获得的表名别名,在sqlRestriction中引用/前缀列名latitude和longitude。它是有效的,但是如果底层ORM实现发生了变化,这段代码当然会中断

我尝试使用createAlias()引用纬度和经度,但这不起作用,因为它们超出了sqlRestriction中SQL代码的范围。使用{alias}.latitude{alias}.logitude将创建“this_u.latitude”“this_u.longitude”的原始SQL,这也没有帮助

在sqlRestriction中,什么替代了“原点经度、原点经度”和“站点经度、站点经度”

有一个用户在上有类似的问题,但我使用的是grails和Offer。createCriteria()返回一个BuildableCriteria而不是Criteria

有谁能用CriteriaAPI解决这个问题呢

  class Offer implements Serializable {  

    Station origin

    static hasMany = [stations: Station, bookings: Booking]

    Date startDate
    ....
  }

  class Station implements Serializable {

    BigDecimal latitude
    BigDecimal longitude
    ...
  }


  def readOffers(Thing from, Thing to, Date departureDate){

  BuildableCriteria offerCriteria = Offer.createCriteria()

  Closure c = {

  ge('endDate', new Date())

  if (departureDate != null)
  {
    sqlRestriction 'date(end_date) >= ?', [departureDate]
    sqlRestriction 'date(start_date) <= ?', [departureDate]
  }

  origin {
    sqlRestriction '(earth_distance( ll_to_earth(?, ?), ll_to_earth(origin_ali1_.latitude, origin_ali1_.longitude)) < 25000)', [from.latitude, from.longitude]
  }

  stations {
    sqlRestriction '(earth_distance( ll_to_earth(?, ?), ll_to_earth(stations_a2_.latitude, stations_a2_.longitude)) < 25000)', [to.latitude, to.longitude]
  }
}

return offerCriteria.listDistinct(c)
}
类提供实现可序列化{
车站起点
静态hasMany=[站点:站点,预订:预订]
起始日期
....
}
类站实现可序列化{
大十进制纬度
大十进制经度
...
}
def readOffers(开始日期、结束日期、离开日期){
BuildableCriteria offerCriteria=Offer.createCriteria()
闭包c={
ge('endDate',new Date())
如果(离开日期!=null)
{
sqlRestriction'日期(结束日期)>=?',[离开日期]
sqlRestriction'日期(开始日期)