当前位置: 首页 > 知识库问答 >
问题:

MySQL/Hibernate:在插入类型Time上获取值1H

韩靖琪
2023-03-14

我正在做一个java web项目,它使用了:

>

  • Hibernate5.2.2/JPA2.0MySQL5InnoDBDialect

    MySQL < code > 5 . 6 . 15 -< code > innoDB (在EasyPHP/PHPMyAdmin上)JDBC 连接器6.0.4

    我在数据库中插入Time数据时遇到问题。每次我输入一行,我都会在时间列上得到一个1H值!

    • Java的属性:

    @JsonFormat(shape=JsonFormat。Shape.STRING,pattern = " HH:mm ")< br > @ Column(name = " RES _ DUREE ",nullable = false)< br > @ Temporal(Temporal type。时间)私人日期预订;

    • SQL上的属性:

    RES_DUREE时间不为空;

    编辑(在阿德里安·岑的评论之后):

      < li >连接线:

    jdbc.url=jdbc:mysql://localhost:3306/mydb?useUnicode=true

    我确实使用UTC,但它仍然是1H。
    任何建议都会有帮助,谢谢。

  • 共有1个答案

    西门山
    2023-03-14

    通常是由服务器和数据库时区不匹配引起的。

    简而言之,< code>java.util.Date不包含时区信息。从概念上讲,你可以把它简单地看作是表示日期时间(类似于JODA/JSR 310 < code > local datetime 正在做的事情)。因此,如果您的应用服务器是UTC 10,您的数据库是UTC 2,当您保存日期“2016-10-13 10:11:12”时,尽管您的应用服务器将其视为“2016-10-13 10:11:12 10:00”,但它只是将“2016-10-13 10:11:12”传递给数据库。给定DB是UTC 2,它认为时间实际上表示“2016-10-13 10:11:12 02:00”。如果您的JDBC连接声称是“UTC 10”,情况会变得更加混乱,大多数html" target="_blank">数据库会“智能地”将“2016-10-13 10:11:12 02:00”翻译为“2016-10-13 18:11:12 10:00”,这导致存储和检索奇怪的时间。

    您可以通过跟踪相应插入和选择的SQL(和实际使用的值)来进行诊断。您应该会看到这些值与表中存储的值之间的差异。这种追踪可以通过各种方式完成,例如

    1. 旧版本的 Hibernate 可以通过打开正确的记录器来显示预准备语句中使用的参数
    2. 你可以使用像 JdbcDsLog 这样的工具 (免责声明:我是 JbdcDs 日志的一个分支的维护者,http://github.com/adrianshum/jdbcdslog)
    3. DBMS 端可能有工具来跟踪传入查询。

    最好的解决方法是确保所有内容都在同一时区,而时区最合理的选择是UTC。

     类似资料:
    • 问题内容: 我正在掌握PDO的基础知识。 但是我试图获取插入的行的ID,我使用: 我遇到的教程都是关于交易的,但是我没有使用交易! 问题答案: 您可能正在寻找lastInsertId。“返回最后插入的行或序列值的ID”。

    • 本文向大家介绍如何在MySQL ENUM数据类型中插入默认值?,包括了如何在MySQL ENUM数据类型中插入默认值?的使用技巧和注意事项,需要的朋友参考一下 我们可以借助ENUM数据类型的DEFAULT属性来实现。如果未指定值,则DEFAULT属性会使ENUM数据类型具有默认值。换句话说,我们可以说INSERT语句不必为此字段包含值,因为如果不包含该值,那么将插入DEFAULT之后的值。DEFA

    • 我想在Hibernate中获取最后一个插入值的id。 搜索后: 但是下面的代码给我这个错误: JAVAClassCastException:java。数学无法将BigInteger转换为java。朗·朗 请分享你的想法! 解决方案 不要忘记导入: 导入java.math.大整数;

    • 我试图将CDI与Spring和JPA(hibernate)一起使用,但我遇到了一些问题。 Imovel(实体) 伊莫韦尔比恩 伊莫维尔道 当我尝试插入: Hibernate日志记录: 在Imovel(bairro、cep、cidade、Compemento、endereco、estado、numero、observacao、quarto、tipoImovel、tipoSituacao、tipoVe

    • 问题内容: 我使用PDO和MySQL,出于某种原因,当从数据库中获取int类型的值时,PDOStatement返回的是数字的字符串表示形式,而不是数字类型的值。如何防止这种情况发生? 我注意到有一个PDO类的属性:应该可以解决这个问题,但是在尝试修改它时,它抛出一个错误,指出该属性对MySQL驱动程序无效。 查询数据库时,获取字符串而不是数字是否正常? 问题答案: 我不认为可以在PHP 5.2中完

    • 我收到以下异常- org.hibernate.exception.sqlgrammarexception:无法插入:[Employee] 以下是详细信息: hibernate.cfg.xml employee.hbm.xml 请帮助解决异常。提前道谢!