Hibernate @Formula не поддерживает запрос содержит функцию 'CAST () как int' - PullRequest
1 голос
/ 08 июля 2011

Ниже приводится свойство класса ExecutionHistory, значение которого выбирается из @Formula с использованием JPA / Hibernate из таблицы exectution_history,

@Formula("(SELECT SUM(dividend) || '/' || SUM(divisor) " +
"FROM (SELECT CAST(substr(sr.result, 1, position('/' in sr.result)-1 ) AS int) AS dividend ," +
"CAST(substr(sr.result, position('/' in sr.result)+1 ) AS int) AS divisor " +
"FROM suite_results as sr WHERE sr.execution_history=id) AS division)")
private String result;

Когда я попытался получить экземпляр класса ExecutionHistory, я обнаружил, что приведенный выше запрос формулы конвертируется JPA / Hibernate следующим образом:

select executionh0_.id as id7_1_, executionh0_.execution_plan as execution3_7_1_, executionh0_.start_time as start2_7_1_, 
(SELECT SUM(sr.duration) FROM suite_results as sr WHERE sr.execution_history=executionh0_.id) as formula0_1_, 
(SELECT SUM(executionh0_.dividend) || '/' || SUM(executionh0_.divisor) FROM 
(SELECT CAST(substr(sr.result, 1, position('/' in sr.result)-1 ) AS executionh0_.int) AS executionh0_.dividend , 
CAST(substr(sr.result, position('/' in sr.result)+1 ) AS executionh0_.int) AS executionh0_.divisor 
FROM suite_results as sr WHERE sr.execution_history=executionh0_.id) AS executionh0_.division) as 
formula1_1_, executionp1_.id as id6_0_, executionp1_.build_number as 
build2_6_0_, executionp1_.name as name6_0_, executionp1_.owner as owner6_0_, executionp1_.sut as sut6_0_, 
executionp1_.wait_for_page_to_load as wait6_6_0_ from execution_history executionh0_ 
left outer join execution_plans executionp1_ on executionh0_.execution_plan=executionp1_.id where executionh0_.id=?

Таким образом, проблема в том, что здесь запрос формулы содержит «CAST () AS int», но во время преобразования запроса Hibernate помещает ненужную ссылку на таблицу и выполняет ее как «CAST () AS executeh0_.int», поэтому он дает sql Исключение грамматики при исполнении.

Я понятия не имею, как избежать этой проблемы. Кто-нибудь может мне помочь в этом?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 08 мая 2013

Это старый вопрос, но я все равно отправлю ответ.

Если вы используете базу данных SQL Server, вы можете добавить двойные кавычки вокруг типа, который вы используете.Как то так:

@Formula("CAST(FLOOR(CAST( dat_criacao AS \"float\")) AS \"datetime\")")
0 голосов
/ 13 октября 2011

Не знаю, какую базу данных вы используете, но в SQL Server вы должны использовать CONVERT, а не CAST в своих запросах Hibernate.

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