假设我有一个表示坐标(纬度和经度)的 POJO 和表示地点的域类。地方有一个坐标。
坐标.groovy
class Coordinate implements Serializable{
float latitude
float longitude
...
}
CoordinateUserType.groovy
class CoordinateUserType implements UserType{
int[] sqlTypes() { [Types.FLOAT, Types.FLOAT]}
public Object nullSafeGet(rs, names, owner){
/*not full code published, just what is relevant*/
return new Coordinate(rs.getFloat(names[0]), rs.getFloat(names[1]))
}
public Object nullSafeSet(st, object, index){
/*not full code published, just what is relevant*/
st.setFloat(index, value.latitude)
st.setFloat(index+1, value.longitude)
}
}
Place.groovy
class Place{
...
Coordinate coordinate
...
static mapping = {
coordinate type:CoordinateUserType, {
column name:'latitude'
column name:'longitude'
}
}
}
我为坐标(2 列)创建了一个用户类型,并在地点域类的映射中引用它。
我可以正确地创建和列出地点。
但我想根据坐标查询这些地方,比如
在哪里:
def matchingPlaces = Place.where{
coordinate.latitude > 0 && coordinate.latitude < 10 &&
coordinate.longitude > 0 && coordinate.longitude < 10
}
有标准:
def matchingPlaces = Place.createCriteria().list{
and{
between('coordinate.latitude', 0,10)
between('coordinate.longitude', 0,10)
}
}
/*or */
def matchingPlaces = Place.createCriteria().list{
coordinate{
and{
between('latitude', 0,10)
between('longitude', 0,10)
}
}
}
但是无论我在 between 闭包的列名中输入什么,我总是得到一个错误“无法解析属性”。
查询具有多列的自定义用户类型的过程是什么?
提前致谢