嗨,我们正在尝试将属性<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:
理论上它应该已经工作了:-)
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的部分讨论:
hibernate.jdbc.time_zone
处理Timestamp
s (它尝试将给定的Timestamp
转换为给定的时区,然后再将其传递给 Vert.x SQL 客户端)可能或者可能不健壮,但对于Time
来说,它在概念上似乎并不正确。所以选项是(1)只是默默地忽略设置,(2)当设置存在时爆炸,或者(3)做一些我们知道被破坏的事情。
我倾向于选择(2)。
我_假设_我们可以继续做我们目前正在为日期时间做的事情,而忽略时间设置。 但是,天哪,这相当于对已经有点损坏的功能引入了一种新的和不同的解释。 呸。
@pqab你为什么精确地使用这个设置? 你能合理地,比如,只是_不_使用它吗?
@pqab为什么_精确_你使用这个设置? 你能合理地,像,只是_not_use它?
@Ngosti2000 的同样问题
公平地说,我没想到它会应用于像LocalTime
这样没有时区的对象。
我怀疑问题在于它是一个全局属性,如果您设置它是因为它在其他情况下有意义,我认为没有办法为特定字段禁用它。 或者也许有?
公平地说,我没想到它会应用于像
LocalTime
这样没有时区的对象。
对,一样。 我们假设了太多的理智。
我认为没有办法为特定字段禁用它。 或者也许有?
从来没听说过。
我们还有一些其他DATE
字段需要全局属性,但我们希望TIME
字段应该被忽略,因为它没有时区
完毕
最有用的评论
没关系....我可以看到异常