2

Gorm を使用して、最も近い 10 個のジオローカライズされたオブジェクトを取得したいと考えています。そのために、 get_distance(経度、緯度、:経度、:緯度) sql 関数を使用するためにorder()パラメータをカスタマイズしたいと思います。私は一日中これに苦労しています、誰かヒントがありますか?

ありがとう !

編集

私は最終的に私が望んでいたことをすることができましたが、非常に醜い解決策でした:

  • get_distance() 関数を配置する sqlProjection を追加し、それによって注文することができました。
  • プロジェクションを追加すると、オブジェクト プロパティの取得が削除されるため、プロパティ プロジェクションを追加して明示的に要求する必要があり、イントロスペクションを使用してそれを行うことができました。
  • 次に、ドメイン インスタンスを取得するための基準の結果トランスフォーマーを定義する必要がありました。
4

2 に答える 2

1

関数を hibernate SQL ダイアレクトに登録すると、それを HQL クエリで使用できます。たとえば、これをブートストラップ コードに入れます。

import org.hibernate.dialect.function.SQLFunctionTemplate
import org.hibernate.Hibernate

def dialect = applicationContext.sessionFactory.dialect
def getDistance = new SQLFunctionTemplate(Hibernate.INTEGER, "get_distance(?1,?2)")
dialect.registerFunction('get_distance', getDistance)

次に、HQL で使用できます。

Location.executeQuery(
    """
        select id, get_distance(latitude, longitude) as distance 
        from Location
        order by distance
    """, 
    [], [max: 10])
于 2012-04-16T16:29:03.863 に答える
0

私たちがしたことは次のとおりです。

  1. DB固有の演算子を使用してクエリを作成しますが、ビューとして作成します
  2. ビューにマップするためだけに新しいドメインクラスオブジェクトを作成します。これにより、GORM基準クエリなどを実行できます。
于 2012-04-16T16:52:31.753 に答える