Hibernate-reactive: TIME 列不支持 hibernate.jdbc.time_zone

创建于 2021-06-14  ·  21评论  ·  资料来源: hibernate/hibernate-reactive

嗨,我们正在尝试将属性<property name="hibernate.jdbc.time_zone" value="UTC"/>添加到我们的应用程序中,但是我们在某些 MySQL TIME列上获得了UnsupportedOperationException ,请问有什么计划支持它吗?

堆栈跟踪

java.lang.UnsupportedOperationException: null at org.hibernate.reactive.adaptor.impl.PreparedStatementAdaptor.setTime(PreparedStatementAdaptor.java:246) Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:

环境信息

  • 版本:1.0.0.CR6
problem

最有用的评论

没关系....我可以看到异常

所有21条评论

理论上它应该已经工作了:-)
https://github.com/hibernate/hibernate-reactive/issues/667

我会看看的

你能举一个你正在使用的实体的例子吗? 复制器会更好。 您可以使用 JBang 启动示例测试用例:

jbang init -t mysql-reproducer@hibernate/hibernate-reactive Issue856.java
jbang edit --open=idea --live Issue856.java

您可以将idea替换为您喜欢的 IDE

没关系....我可以看到异常

更多细节,我们在实体中使用 LocalTime,在数据库中使用 TIME

实体
public class A { @Column(name = "time") private LocalTime time; }

桌子
CREATE TABLE IF NOT EXISTS A ( time TIME )

所以这里的问题是分区 _time_ 的概念完全被打破了,不应该在 SQL 中引入(幸运的是大多数数据库不支持它)。 时区之间的映射_取决于日期_,因此只有分区日期时间才有意义。

直到此刻,我对hibernate.jdbc.time_zone的行为一无所知,乍一看,这对我来说看起来很糟糕,也许我们应该在 H6 中更改它。

所以我不确定在这里做什么。 “修复”它以做与 ORM 相同的坏事,还是在处理时间时忽略设置?

或者干脆完全忽略该属性,并找出如何使用连接属性来代替? (可能需要 Vert.x 客户端中的新功能,我不确定。)

我正在删除“错误”标签。 这不是分区时间不起作用的错误。 它们被_设计_破坏了。

(这当然部分是我的错,因为我在做 #676 时没有深入挖掘并注意到hibernate.jdbc.time_zone的行为问题。)

在这里开始讨论。

时区之间的映射_取决于日期_,因此只有分区日期时间才有意义。

好的,但他们正在尝试存储一个没有附加任何时区且不需要任何转换的LocalTime
我错过了什么吗?

但这似乎不是这个属性的作用。 在 ORM 中,它为事物附加了一个时区。

至少,在我看来。 (我一直无法完全理解那个 JDBC 方法的语义。)

“修复”它做与 ORM 一样的坏事

我想我会检查 ORM 的功能并做同样的事情。 无论如何,这可能是熟悉 ORM 的用户所期望的行为。

我想我会检查 ORM 的功能并做同样的事情。

哈哈哈哈可爱的夏天孩子!

ORM 调用一个 JDBC 方法,该方法具有本质上未记录的语义。

(并且可能在每个数据库上表现不同。)

因此,回顾一下在 Zulip 上与@yrodiere的部分讨论:

  1. 他说这些东西一开始在 ORM 中都是非常脆弱的(并且可能会损坏),部分原因是所有的 JDBC 驱动程序都做着脆弱和不同的事情。
  2. 我决定用hibernate.jdbc.time_zone处理Timestamp s (它尝试将给定的Timestamp转换为给定的时区,然后再将其传递给 Vert.x SQL 客户端)可能或者可能不健壮,但对于Time来说,它在概念上似乎并不正确。

所以选项是(1)只是默默地忽略设置,(2)当设置存在时爆炸,或者(3)做一些我们知道被破坏的事情。

我倾向于选择(2)。

我_假设_我们可以继续做我们目前正在为日期时间做的事情,而忽略时间设置。 但是,天哪,这相当于对已经有点损坏的功能引入了一种新的和不同的解释。 呸。

@pqab你为什么精确地使用这个设置? 你能合理地,比如,只是_不_使用它吗?

@pqab为什么_精确_你使用这个设置? 你能合理地,像,只是_not_use它?

@Ngosti2000 的同样问题

公平地说,我没想到它会应用于像LocalTime这样没有时区的对象。

我怀疑问题在于它是一个全局属性,如果您设置它是因为它在其他情况下有意义,我认为没有办法为特定字段禁用它。 或者也许有?

公平地说,我没想到它会应用于像LocalTime这样没有时区的对象。

对,一样。 我们假设了太多的理智。

我认为没有办法为特定字段禁用它。 或者也许有?

从来没听说过。

我们还有一些其他DATE字段需要全局属性,但我们希望TIME字段应该被忽略,因为它没有时区

完毕

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

akoufa picture akoufa  ·  30评论

Thomodachi picture Thomodachi  ·  15评论

markusdlugi picture markusdlugi  ·  30评论

gavinking picture gavinking  ·  23评论

tsegismont picture tsegismont  ·  9评论