grails 3.3.9应用程序中的条件中的sqlRestriction中的引用列
我有两个域名提供和站。我编写了一个条件查询,它将返回离出发站(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解决这个问题呢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
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'日期(开始日期)