指定Hibernate方言后仍未将LOCATE函数替换为对应数据库函数的问题求助
指定Hibernate方言后仍未将LOCATE函数替换为对应数据库函数的问题求助
大家好,我现在用Olingo JPA生成OData API,碰到了一个棘手的问题想请教各位。
我连接的数据库不支持LOCATE函数,而是用POSITION来实现类似功能,像PostgreSQL、SQL Server、Snowflake这些数据库都是这种情况。
我已经通过配置属性指定了对应的Hibernate方言,比如针对PostgreSQL的配置如下:
spring.data.jdbc.dialect=postgresql spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
我特意去看了Hibernate的源码,发现org.hibernate.dialect.PostgreSQLDialect里会调用functionFactory.locate_positionSubstring(),而SqlServerDialect则会调用functionFactory.locate_charindex()——按我的理解,这应该意味着PostgreSQL方言会把LOCATE替换成POSITION,SQL Server方言替换成CHARINDEX才对。
但当我开启SQL日志(spring.jpa.show-sql=true)后,看到生成的SQL语句里依然在使用LOCATE函数,比如这条日志:
SELECT COUNT(E0.id) S0 FROM MY_TABLE E0 WHERE (LOCATE(?, E0.value) <> ?...
有没有大佬知道这是哪里出问题了?为什么方言的配置没生效呢?
备注:内容来源于stack exchange,提问作者Person
相关产品推荐
相关产品推荐

