【问题标题】:Hibernate : Generic JDBC exception - Bad format for Time '838:59:59'Hibernate:通用 JDBC 异常 - Time '838:59:59' 的格式错误
【发布时间】:2013-03-12 11:11:43
【问题描述】:

我的休眠映射如下:

<property formula="(Timediff(ifnull(sttime,now()),sstime))" insert="false" name="duration" update="false" />
where sstime is of type Timestamp

这里这个公式从我的数据中以这种格式“838:59:59”返回一些值。

当我尝试在具有“java.sql.Time”类型的“持续时间”字段中加载此值时出现异常,它给了我这个异常。

"Generic JDBC exception - Bad format for Time '838:59:59'"

【问题讨论】:

标签: java mysql hibernate


【解决方案1】:

那确实不是一个有效的时间。您不应该使用 java.sql.Time 来表示持续时间,特别是如果此持续时间可能超过 24 小时,因为 Time 表示日期的时间部分。请改用自定义类型,或者只是您自己解析的字符串。

【讨论】:

  • 好的...所以有什么办法可以让我改变休眠的行为并手动将其解析为时间格式。?并感谢您的回复...
  • 将您的字段声明为字符串,而不是将其声明为时间。
【解决方案2】:

【讨论】:

  • 但它的参数中有 DateTime 并且我有 TimeStamp 。 TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
【解决方案3】:

按照 MySQL 文档,您应该使用 TIMESTAMPDIFF() 和 UNIX_TIMESTAMP():

TIMEDIFF() 返回的结果被限制在允许的范围内 时间值。或者,您可以使用任一功能 TIMESTAMPDIFF() 和 UNIX_TIMESTAMP(),两者都返回整数。

查询可能看起来像这样,但取决于您使用的结果数据类型:

SELECT FROM_UNIXTIME(TIMESTAMPDIFF(SECOND,sstime,NOW())) FROM time_table;

SELECT FROM_UNIXTIME(UNIX_TIMESTAMP() - UNIX_TIMESTAMP(sstime)) FROM time_table;

Demo

【讨论】:

  • 我认为可能对我有用...要尝试此操作,我需要编写以下行: 和休眠将 'SECOND' 设置为 'this_.SECOND'.so 我该如何解决这个问题..?
猜你喜欢
  • 1970-01-01
  • 2014-08-09
  • 1970-01-01
  • 2013-10-19
  • 1970-01-01
  • 2018-07-25
  • 1970-01-01
  • 1970-01-01
  • 2021-09-04
相关资源
最近更新 更多