【问题标题】:Use DATE_ADD in Hibernate @Formula [duplicate]在 Hibernate @Formula 中使用 DATE_ADD [重复]
【发布时间】:2015-10-19 09:32:38
【问题描述】:

我正在尝试在 Hibernate 公式中使用 DATE_ADD (Mysql) 函数。

这是我的领域:

@Formula(value = "(SELECT DATE_ADD(v.dataAndata, INTERVAL v.minutiTrasportoAndata MINUTE) FROM VenditaB2B v WHERE v.id = id)")
private Date dataImbarco;

不幸的是,当 Hibernate 执行查询时,它会将查询翻译为:

(SELECT DATE_ADD(v.dataAndata, venditab2b0_.INTERVAL v.minutiTrasportoAndata venditab2b0_.MINUTE) FROM VenditaB2B v WHERE v.id = venditab2b0_.id) as formula5_

当然这是错误的,因为它认为 MINUTE 和 INTERVAL 是我的表 VenditaB2B 的列。 我尝试使用单引号和双引号没有运气。

有办法解决这个问题吗?谢谢!

【问题讨论】:

标签: java mysql hibernate


【解决方案1】:

Hibernate 不支持 MySQL 的 DATE_ADD 语法。所以你必须使用原生查询

参考:https://forum.hibernate.org/viewtopic.php?f=1&t=982311&view=next

【讨论】:

  • 我知道不支持。事实上,我正在使用我的自定义方言,在其中添加了 registerFunction("date_add_interval", new SQLFunctionTemplate(StandardBasicTypes.DATE, "DATE_ADD(?1,INTERVAL ?2 ?3)"));这个功能。但公式似乎使用本机查询。事实上 date_add_interval 在@Formula 中未被识别为有效函数。
  • @Formula 中的查询已经是原生查询。但是,似乎不支持某些 mysql 构造。真的不确定,但也许@Formula 支持关键字转义语法,如@Column[INTERVAL] v.minuti [MINUTE]
  • 你使用的是哪种 MySQL 方言?
  • 我正在扩展 MySQL5InnoDBDialect
猜你喜欢
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-26
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
相关资源
最近更新 更多