On 21 déc. 2011, at 15:19, Hardy Ferentschik wrote:

> 
> On Dec 21, 2011, at 2:59 PM, Emmanuel Bernard wrote:
> 
>> Which one do you prefer (line in bold for each sample)?
>> 
>>                      builder
>>                              .spatial()
>>                                      .onCoordinates( "location" )  or 
>> .forCoordinates("location") or .forLocation("location") or something else
>>                                      .within( 500, Unit.KM )
>>                                              
>> .of().latitude(48.858333d).longitude(2.294444d)
>>                                      .createQuery();
> 
>                       builder
>                               .spatial()
>                                       .forLocation("location") 
>                                       .within( 500, Unit.KM )
>                                               
> .of().latitude(48.858333d).longitude(2.294444d)
>                                       .createQuery();
> 
> On a side node, do we really need 'of()'. Sure it makes it sounds a little 
> more like real English, but then why is there no 'and()' between lat and long.
> The whole DSL part only carries so far when directly hosted in Java. If there 
> is no compelling reason for 'of()' i would argue one can drop it.

There is a reason for the of(). An overloaded form used when the user passes a 
Coordinates object is like this

builder
    .spatial()
        .forLocation("location")
        .within(500, Unit.KM)
            .of(coordinates)
        .createQuery();

So you can see there is a symmetry to it.

But we can reduce the number of methods called by doing something like this

builder
    .spatial()
        .forLocation("location")
        .within(500, Unit.KM)
            .ofLatitude(48.8d).andLongitude(2.29d)
        .createQuery();

Would you like it better?

> 
> what's about 'proximity' instead of 'spatial'?

I am somewhat neutral, but I think the industry term is spatial queries. 
Thoughts?

> 
> 
>>                      builder
>>                              .spatial()
>>                                      .onLatitudeField( "latitude" 
>> ).onLongitudeField( "longitude" ) or .forLatitudeField( "latitude" 
>> ).forLongitudeField( "longitude" )  or something else
>>                                      .within( 51, Unit.KM )
>>                                              .of().latitude( 24d 
>> ).longitude( 31.5d )
>>                                      .createQuery();
> 
>                       builder
>                               .spatial()
>                                       .onFields(long, lat)
>                                       .within( 51, Unit.KM )
>                                               .of().latitude( 24d 
> ).longitude( 31.5d )
>                                       .createQuery();

As Karel pointed out, a major bug in spatial queries is people using latitude 
instead of longitude and vice versa. onFields does leave this can of worms open
_______________________________________________
hibernate-dev mailing list
hibernate-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/hibernate-dev

Reply via email to