Tom*_*ton 5 sql-server hibernate
我们有一个带有公式属性的实体列,需要今天的午夜日期才能计算自己的属性:
DATEADD(DD, DATEDIFF(DD, 0, GETDATE()), 0)
Run Code Online (Sandbox Code Playgroud)
Hibernate将其转换为:
DATEADD(mytablename0_.DD, DATEDIFF(mytablename0_.DD, 0, GETDATE()), 0)
Run Code Online (Sandbox Code Playgroud)
我已经仔细检查过我的方言是SqlServer.我也换DD了DAY,但问题仍然存在.
如何让hibernate认识到DD是一个关键字?
小智 8
从Sybase升级到SQLServer时遇到了同样的问题.我的场景中的字段是一个整数字段,用于存储自1970-01-01以来的日期.DATEADD函数用于将该整数转换为真正的日期,因此我们通过hibernate映射对象获得了良好的表示.
我对此字段的原始映射如下:
<property name="lostDate" type="date">
<formula>dateadd(dd, lost_date, '01-JAN-1970')</formula>
</property>
Run Code Online (Sandbox Code Playgroud)
这导致您在问题中描述的问题,即生成的sql传递给数据库的位置是:
dateadd( table0_.dd, table0_.lost_date, '01-JAN-1970')
Run Code Online (Sandbox Code Playgroud)
更新映射以在双引号中包围dateadd关键字dd为我解决了这个问题.
<property name="lostDate" type="date">
<formula>dateadd("dd", lost_date, '01-JAN-1970')</formula>
</property>
Run Code Online (Sandbox Code Playgroud)
SQL Server 2008接受了下面生成的SQL并按预期执行.
dateadd("dd", table0_.lost_date, '01-JAN-1970')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
866 次 |
| 最近记录: |