Hibernate Рассматривает даты в SQL Server как столбцы вместо ключевых слов - PullRequest
5 голосов
/ 30 марта 2012

У нас есть столбец сущности со свойством формулы, для которого требуется сегодняшняя дата в полночь, чтобы вычислить само свойство:

DATEADD(DD, DATEDIFF(DD, 0, GETDATE()), 0)

Hibernate превращает это в:

DATEADD(mytablename0_.DD, DATEDIFF(mytablename0_.DD, 0, GETDATE()), 0)

Я дважды проверил, что мой диалект SqlServer. Я также заменил DD на DAY, но проблема остается.

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

Ответы [ 3 ]

8 голосов
/ 18 апреля 2012

У меня была такая же проблема при обновлении с Sybase до SQLServer. Поле в моем сценарии было целочисленным полем, которое использовалось для хранения даты с 1970-01-01. Функция DATEADD использовалась для преобразования этого целого числа в подлинную дату, поэтому у нас было хорошее представление через отображенные объекты гибернации.

Мое исходное отображение для этого поля было следующим:

<property name="lostDate" type="date">
  <formula>dateadd(dd, lost_date, '01-JAN-1970')</formula>
</property>

Это привело к проблеме, которую вы описали в вопросе, где полученный sql, переданный в базу данных:

dateadd( table0_.dd, table0_.lost_date, '01-JAN-1970')

Обновление сопоставления для включения ключевого слова dateadd dd в двойные кавычки решило эту проблему для меня.

<property name="lostDate" type="date">
  <formula>dateadd("dd", lost_date, '01-JAN-1970')</formula>
</property>

SQL Server 2008 принял сгенерированный SQL ниже и выполнил как ожидалось.

dateadd("dd", table0_.lost_date, '01-JAN-1970')
0 голосов
/ 07 октября 2014

У меня была такая же проблема с аннотациями. Цитирование части даты работало и для меня.

@Formula("datediff(\"YEAR\", birthdate, current_timestamp)")
0 голосов
/ 05 апреля 2012

Возможно, вы можете попробовать заменить выражение другим, не используя ключевые слова DATEPART.Пример - преобразование его в varchar туда и обратно:

CONVERT(DATETIME,CONVERT(VARCHAR(10),GETDATE(),111))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...