Java JPA中的三角函数

Java JPA中的三角函数,java,sql,hibernate,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.longit

我正在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
我搜索了一下,似乎有些人建议在使用三角函数时使用本机查询,但这对我来说真的很烦人,因为我不得不修改很多已经用JPA编写的查询。所以我问:有没有办法修改查询以使其工作?如果JPA框架不支持公共三角函数,那将非常奇怪。
谢谢。

JPQL不支持那些trig函数(JDO不支持FWIW)。一些实现可能支持它们作为供应商扩展。我知道,但其他人也可能知道

或者使用JPQL标准,并使用(冗长的)语法,如

function('sin', :lat)

尽管这可能会丢掉数据库独立性,但这应该是您的项目关注的问题。

事实上,“function”关键字似乎是一个有趣的选项(至于db独立性,我认为所有sql数据库都有一个“sin”函数)。我希望嵌套函数不会产生问题/性能问题。我将对此进行测试并报告。谢谢@Splitter123函数嵌套是否起作用?如果是的话,你能分享一下吗?
function('sin', :lat)