Как создать собственный диалект 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 ... СТРОКИ FETCH FIRST... ТОЛЬКО СТРОКИ?
Будем очень признательны за любую помощь или рекомендации по правильной настройке пользовательского диалекта для Impala.

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

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

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

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

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

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

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