Sql server Hibernate将SQL Server日期部分视为列而不是关键字

Sql server Hibernate将SQL Server日期部分视为列而不是关键字,sql-server,hibernate,Sql Server,Hibernate,我们有一个带有公式属性的实体列,该列需要今天午夜的日期才能计算自身属性: DATEADD(DD, DATEDIFF(DD, 0, GETDATE()), 0) Hibernate将其转换为: DATEADD(mytablename0_.DD, DATEDIFF(mytablename0_.DD, 0, GETDATE()), 0) 我已经仔细检查了我的方言是SqlServer。我还将DD替换为DAY,但问题仍然存在 如何让hibernate识别DD是一个关键字?也许您可以尝试用另一个不使用D

我们有一个带有公式属性的实体列,该列需要今天午夜的日期才能计算自身属性:

DATEADD(DD, DATEDIFF(DD, 0, GETDATE()), 0)
Hibernate将其转换为:

DATEADD(mytablename0_.DD, DATEDIFF(mytablename0_.DD, 0, GETDATE()), 0)
我已经仔细检查了我的方言是SqlServer。我还将
DD
替换为
DAY
,但问题仍然存在


如何让hibernate识别DD是一个关键字?

也许您可以尝试用另一个不使用DATEPART关键字的表达式替换该表达式。 示例-将其来回转换为varchar:

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

从Sybase升级到SQLServer时,我也遇到了同样的问题。我的场景中的字段是一个整数字段,用于存储自1970-01-01以来的日期。DATEADD函数用于将该整数转换为真实日期,因此我们通过hibernate映射对象获得了良好的表示

我对该字段的原始映射如下所示:

<property name="lostDate" type="date">
  <formula>dateadd(dd, lost_date, '01-JAN-1970')</formula>
</property>
更新映射以双引号括起dateadd关键字dd,为我解决了这个问题

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

我对注释也有同样的问题。引用日期部分对我也很有用

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

我也遇到了同样的问题,实际上可以通过将DD替换为“DD”来解决这个问题,但在某些情况下它不起作用

另一种解决了我的问题的技术是用NHibernate认可的DAY替换DD

dateadd("dd", table0_.lost_date, '01-JAN-1970')
@Formula("datediff(\"YEAR\", birthdate, current_timestamp)")