Как создать собственный диалект SQL Hibernate, совместимый с Cloudera Impala (Hibernate 6.2.2.Final)JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как создать собственный диалект SQL Hibernate, совместимый с Cloudera Impala (Hibernate 6.2.2.Final)

Сообщение Anonymous »

Я пытаюсь создать собственный диалект Hibernate SQL для Cloudera Impala. Я использую Hibernate 6.2.2.Final, и мне нужно убедиться, что сгенерированный SQL для разбиения на страницы использует синтаксис LIMIT ... OFFSET ....
Проблема
В настоящее время мой собственный диалект генерирует запросы со следующим (неправильным) синтаксисом:

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

SELECT
...
FROM
...
WHERE
...
ORDER BY
...
OFFSET ... ROWS FETCH FIRST ... ROWS ONLY
Вместо этого я хочу, чтобы сгенерированный запрос выглядел так:

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

SELECT
...
FROM
...
WHERE
...
ORDER BY
...
LIMIT ...
OFFSET ...
Текущая реализация
Вот пользовательский ImpalaDialect, который я создал на данный момент:

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

package br.tc.tcesc.sigma.apisigma.config;

import org.hibernate.dialect.Dialect;
import org.hibernate.dialect.pagination.LimitHandler;
import org.hibernate.query.spi.Limit;

import java.sql.PreparedStatement;
import java.sql.SQLException;

public class ImpalaDialect extends Dialect {

public ImpalaDialect() {
super();
// Additional configurations, if necessary.
}

@Override
public LimitHandler getLimitHandler() {
return new LimitHandler() {
@Override
public String processSql(String sql, Limit limit) {
StringBuilder modifiedSql = new StringBuilder(sql);

// Add LIMIT
if (limit.getMaxRows() != null) {
modifiedSql.append(" limit ").append(limit.getMaxRows());
}

// Add OFFSET
if (limit.getFirstRow() != null) {
modifiedSql.append(" offset ").append(limit.getFirstRow());
}

return modifiedSql.toString();
}

@Override
public boolean supportsLimit() {
return true;
}

@Override
public boolean supportsOffset() {
return true;
}

@Override
public boolean supportsLimitOffset() {
return true;
}

@Override
public void setMaxRows(Limit limit, PreparedStatement statement) throws SQLException {
// We don't configure maxRows directly; we use LIMIT in the SQL.
}

@Override
public int bindLimitParametersAtEndOfQuery(Limit limit, PreparedStatement statement, int index) throws SQLException {
// We don't use parameters at the end of the query.
return index;
}

@Override
public int bindLimitParametersAtStartOfQuery(Limit limit, PreparedStatement statement, int index) throws SQLException {
// We don't use parameters at the start of the query.
return index;
}
};
}
}
Вопрос
Чего мне не хватает в моей реализации, чтобы гарантировать, что Hibernate генерирует правильный синтаксис SQL с помощью LIMIT ... OFFSET ... вместо OFFSET ... ROWS FETCH FIRST ... ROWS ONLY?
Любая помощь или рекомендации по правильной настройке мы будем очень признательны за специальный диалект Импалы.

Подробнее здесь: https://stackoverflow.com/questions/792 ... -impala-hi
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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