Hibernate, кажется, игнорирует указанный мной диалектJAVA

Программисты JAVA общаются здесь
Anonymous
Hibernate, кажется, игнорирует указанный мной диалект

Сообщение Anonymous »

Я использую Olingo JPA для создания API OData.
База данных, к которой я подключаюсь, не поддерживает функцию «LOCATE»; вместо этого он реализует «POSITION».
Похоже, это верно для нескольких баз данных: postgres, sqlserver и Snowflake.
Я установил диалект используя свойства, например:

Код: Выделить всё

spring.data.jdbc.dialect=postgresql
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
Я вижу, что org.hibernate.dialect.PostgreSQLDialect вызывает

Код: Выделить всё

functionFactory.locate_positionSubstring();
Я также вижу, что вызовы SqlServerDialect

Код: Выделить всё

functionFactory.locate_charindex();
Насколько я понимаю, для PostgreSQLDialect следует использовать функцию позиции, а для SqlServerDialect следует использовать функцию charindex вместо найдите.
Однако, когда я включаю ведение журнала (

Код: Выделить всё

spring.jpa.show-sql=true
), я вижу такие журналы:

Код: Выделить всё

SELECT COUNT(E0.id) S0 FROM MY_TABLE E0 WHERE (LOCATE(?, E0.value)  ?)
Это связано с тем, что библиотека Olingo v2 использует построитель критериев и вызывает его здесь.
Я ожидаю, что эти диалекты ( или если я реализую свою собственную) должен ли спящий режим не вызывать базу данных с помощью функции LOCATE, а вместо этого использовать charindex или позицию? Почему он все еще отправляет запросы LOCATE (которые затем терпят неудачу)?

Подробнее здесь: https://stackoverflow.com/questions/787 ... -i-specify

Вернуться в «JAVA»