我正在 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.
我搜索了一下,似乎有些人建议在使用三角函数时使用 native 查询,但这对我来说真的很烦人,因为我必须修改很多已经用 JPA 编写的查询。所以我问:有没有办法修改查询以使其工作?如果JPA框架不支持常见的三角函数那就很奇怪了。 谢谢。
最佳答案
JPQL 不支持这些三角函数(JDO 支持 FWIW)。某些实现可能支持它们作为供应商扩展。我知道DataNucleus JPA does ,但其他人也可能如此。
或者使用 JPQL 标准,使用(冗长的)语法,例如
function('sin', :lat)
尽管这可能会失去数据库独立性,但这应该是您项目的一个问题。
关于java - JPA 中的三角函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33862042/