gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 23:08:11 26 4
gpt4 key购买 nike

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

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

Hibernate 将其转换为:

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

我已经仔细检查过我的方言是 SqlServer。我还将 DD 替换为 DAY,但问题仍然存在。

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

最佳答案

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

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

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

关于sql-server - Hibernate 将 SQL Server 日期部分视为列而不是关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9945752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com