java - JPA 中的三角函数

标签 java sql hibernate jpa

我正在 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/

相关文章:

java - NoSQL 数据存储提供程序 : org. hibernate.ogm.datastore.mongodb.impl.MongoDBDatastoreProvider

java - 为什么我不能用 Java 写 "implements AClass"?

mysql - 在mysql查询中重新输入别名列

mysql - SQL:如何在 Sql 中使用条件 AND 和 OR

sql - 具有日期比较的Hive查询中的意外行为

java - 如何在 hibernate 中从父表检索子表记录?

java - 无法在 ip 地址上连接 phpmyadmin 说 "67.3.234.45" hibernate

java - 在 Windows 上从 jenkins 发送电子邮件时必须首先发出 STARTTLS 命令

java - Java 中的 DatacontractSerializer

java - 如何处理用 Java 编写的网站的数据库,更具体地说是 Wicket?