在Hibernate中结合NamedQuery和Criteria

时间:2010-10-07 09:32:39

标签: sql hibernate named-query hibernate-criteria haversine

我在storefinder应用程序中使用Hibernate。 对于SQL中的邻近搜索,我使用了hasrsine公式。因为这有点乱,我在我的.hbm.xml文件中为此创建了一个命名的SQL查询。

SELECT
    location.*,
    ( 3959 * acos( cos( radians(7.4481481) ) * 
      cos( radians( X(location.coordinates) ) ) *
      cos( radians( Y(location.coordinates) ) - radians(46.9479986) ) +
      sin( radians(7.4481481) ) * sin( radians( X(location.coordinates) ) ) ) )
    AS distance     
FROM
    location        
WHERE
    location.coordinates IS NOT NULL
HAVING
    distance < :radius
ORDER BY
    distance ASC
LIMIT :max

但我也有一个用户定义的过滤器(营业时间,分类等)。为此,我使用Hibernate标准以编程方式添加过滤器。

现在我有一个完美的NamedQuery工具,可以在一定程度上为我提供所有位置,并提供完美的工作条件查询,根据某些过滤器为我提供所有位置。

我的问题是:Hibernate结合这两只野兽的最佳方法是什么? (即我需要在某一点附近满足某些过滤器的所有位置。)例如,是否有任何方法可以在条件搜索中使用NamedQuery作为子查询?

1 个答案:

答案 0 :(得分:1)

  

Hibernate结合这两种野兽的最佳方式是什么?

据我所知,这是不可能的。所以要么使用Criteria查询写一切(我个人不知道如何做你要求的)或计算动态HQL字符串。