我在JPA中运行以下查询:
SELECT c, acos(sin(:lat) * sin(c.latitude) + cos(:lat) * cos(c.latitude) * cos(c.longitude - :lng)) as dist FROM Item c JOIN c.dish.dishtags tags WHERE tags IN :tags AND (c.latitude >= :lat1 AND c.latitude <= :lat2) AND (c.longitude >= :lng1 AND c.longitude <= :lng2) AND dist <= :maxdist
但我得到以下例外:
[27, 42] The right expression is not an arithmetic expression.
[45, 98] The right expression is not an arithmetic expression.
[13, 14] The SELECT clause has 'acos' and '(sin(:lat) * sin(c.latitude) + cos(:lat) * cos(c.latitude) * cos(c.longitude - :lng)) AS dist' that are not separated by a comma.
我搜索了一下,似乎有些人建议在使用三角函数时使用本机查询,但这对我来说真的很烦,因为我必须修改已经用JPA编写的大量查询。所以我问:有没有办法修改查询以使其工作?如果JPA框架不支持常见的三角函数,那将是非常奇怪的。 谢谢。
答案 0 :(得分:2)
JPQL不支持这些trig函数(JDO支持FWIW)。某些实现可能支持它们作为供应商扩展。我知道DataNucleus JPA does,但其他人也可以。
或者使用JPQL标准,使用(long winded)语法,如
function('sin', :lat)
虽然这可能会破坏数据库的独立性,但这应该是您项目的一个问题。