объединить две таблицы в oracle db с помощью hibernate - одна таблица содержит данные clob - PullRequest
0 голосов
/ 09 декабря 2018

Так что я боролся с этим около 8 часов, и это последний кусок во всем моем мобильном приложении.Пожалуйста, помогите мне преобразовать этот псевдокод в рабочий HQL.У меня есть заявление, которое работает в H2 в базе данных памяти в нижней части, но мой prod DB является оракулом, и он чертовски придирчив.Я пытаюсь получить таблицу лидеров и добавить изображение base64.Даже если я удалю отчетливый рабочий оператор H2, приведенный ниже, он все равно не будет работать с ошибкой `

несовместимые типы данных: ожидается - получил CLOB

.

Заявление, которое я не могу получить на HQL:

select a.*, b.image 
from (select distinct score.staffId as staffId, 
      sum(score.totalScore) as totalScore, 
      sum(score.timeTaken) as timeTaken from Score score) a 
join User b 
on a.staffId=b.staffId"

рабочее заявление в H2:

"select distinct score.staffId as staffId, 
        sum(score.totalScore) as totalScore, 
        sum(score.timeTaken) as timeTaken, 
        user.image as image"
+ " from Score score, User user"
+ " where score.staffId = user.staffId"
+ " group by score.staffId order by totalScore desc, timeTaken asc"

1 Ответ

0 голосов
/ 12 декабря 2018

Несмотря на то, что я ничего не знаю о HQL, я постараюсь ответить на ваш вопрос с другой точки зрения.

Перепишите ваш запрос как ...

select a.*, b.image
from (
        select staffId,
            sum(totalScore) as totalScore,
            sum(timeTaken) as timeTaken
        from Score
        group by staffId
    ) a
    join User b
        on a.staffId = b.staffId

... и это должно работать.

Если это все еще не работает, то вы только что стали свидетелями чудес функции оптимизатора запросов Oracle, называемой "объединение сложных представлений", и вам придется немного помочь вашей базе данных Oracle.с подсказкой no_merge ...

select a.*, b.image
from (
        select --+ no_merge
            staffId,
            sum(totalScore) as totalScore,
            sum(timeTaken) as timeTaken
        from Score
        group by staffId
    ) a
    join User b
        on a.staffId = b.staffId

Что касается вашего ORM, не используйте его для чтения БД, используйте обычный SQL или jOOQ для них. ORM отлично подходят для записи вещей в БД, а не для чтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...