2012-03-30 1088 views
5

tenemos una columna de entidad con una fórmula de propiedad que requiere la fecha de hoy a la medianoche con el fin de calcular misma propiedad:Hibernate servidor Dateparts Trata SQL como columnas en lugar de Palabras clave

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

Hibernate transforma esto en:

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

He comprobado dos veces que mi dialecto es SqlServer. También reemplacé DD con DAY, pero el problema persiste.

¿Cómo me convierto en hibernar para reconocer que DD es una palabra clave?

Respuesta

8

I tenían el mismo problema cuando se actualiza de Sybase para SQLServer. El campo en mi escenario era un campo entero utilizado para almacenar una fecha desde 1970-01-01. La función DATEADD se usó para convertir ese entero en una fecha genuina, así que tuvimos una buena representación a través de los objetos asignados hibernación.

Mi asignación original para este campo fue la siguiente:

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

Esto dio como resultado el problema que se describe en la pregunta, en el que el SQL resultante pasa a la base de datos fue:

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

Al actualizar la asignación para rodear la palabra clave dateadd dd entre comillas, se resolvió este problema por mí.

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

SQL Server 2008 aceptó el SQL generado a continuación y se ejecutó como se esperaba.

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

Quizás pueda intentar reemplazar la expresión con otra que no utilice las palabras clave DATEPART. Ejemplo - la conversión a varchar de ida y vuelta:

CONVERT(DATETIME,CONVERT(VARCHAR(10),GETDATE(),111)) 
0

Tuve este mismo problema con las anotaciones. Citar la parte de la fecha también me ha funcionado.

@Formula("datediff(\"YEAR\", birthdate, current_timestamp)") 
Cuestiones relacionadas