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)")