Spring Data JPA 与 Java 8 LocalDateTime

2024-03-05

过去几个月我一直在使用 Spring Data JPA 和 MYSQL,这是一次非常成功和顺利的经历。在那里,我使用 java 8 LocalDateTime 来存储日期时间字段,JPA 自动将这些字段映射到 mysql tinyblob 列。

最近我收到一个要求,通过脚本向系统添加一些数据。为了填充日期时间列,我创建了 MYSQL TIMESTAMP 变量并插入到tinyblob 列中。然而系统开始抱怨 SerializationException ,其根本原因是转换后的日期时间列。 然后我查看了通过应用程序插入的日期时间列,如下所示

select CAST(drop_off_time AS CHAR(10000) CHARACTER SET utf8) From job

看起来当您通过应用程序插入时,它会作为某种 java 序列化插入。然而,通过 mysql 脚本我们无法复制该功能。

现在我有两个选择。 1)我需要找到一种方法来编写mysql脚本来生成类似于应用程序的日期时间列。 2)我需要将Spring数据JPA映射从tinyblob更改为mysql脚本可以支持的另一种数据类型

感谢你的帮助

谢谢, 凯斯

EDIT

在遵循下面提供的答案和评论后,我找到了一个简单的解决方案

如果你使用 Hibernate 5.0+,你可以加入

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-java8</artifactId>
    <version>${hibernate.version}</version>
</dependency>

然后系统开始将 java 8 LocalDateTime 属性映射到 mysql DATETIME 列


根据 JPA 2.1 LocalDateTime 不受官方支持(可能在短时间内 JPA 2.,2 将成为官方支持)。 Hibernate 5 支持“早期发布”

自 JPA 2.0 以来可移植并受支持javax.persistence.AttributeConverter,在所有 JPA 提供程序上都工作得很好(并且在 Hibernate 5 上也没有什么坏处)

@Converter(autoApply = true)
public class LocalDateAttributeConverter implements AttributeConverter<LocalDate, Date> {

@Override
public Date convertToDatabaseColumn(LocalDate locDate) {
    return (locDate == null ? null : Date.valueOf(locDate));
}

@Override
public LocalDate convertToEntityAttribute(Date sqlDate) {
    return (sqlDate == null ? null : sqlDate.toLocalDate());
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Data JPA 与 Java 8 LocalDateTime 的相关文章

  • 将数据从 MS SQL 导入 MySQL

    我想从 MS SQL Server 导入数据 通过某种正则表达式运行它以过滤掉内容 然后将其导入 MySQL 然后 对于每个查询 我希望显示来自第三个数据库的相关图像 明智地导入和链接 最简单的方法是什么 谢谢 澄清 它是一个 PHP 应用
  • MySQL - 替换列中的字符

    作为一个自学成才的新手 我给自己制造了一个大问题 在将数据插入数据库之前 我将字符串中的撇号 转换为双引号 而不是 MySQL 实际需要的反斜杠和撇号 在我的表增长到超过 200 000 行之前 我认为最好立即纠正此问题 所以我做了一些研究
  • PHP 数据库显示在具有不同锚标记的相同字段中

    我四处寻找 看看这是否可行 但却空手而归 首先 这是我的代码 div style display none div ul li li li li li li ul
  • ORDER BY id 或 date_created 显示最新结果?

    我有一个表 实际上有几个 我想首先从中获取最新条目的结果 这是我的ORDER BY条款选项 date created INT 从不改变值 id 当然是INT AUTO INCRMENT 两列应同等地代表记录插入的顺序 我自然会使用date
  • 在关系数据库中存储树结构的已知方法有哪些? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 RMySQL 会干扰 RPostgreSQL

    我有一个 R 脚本 我想从 MySQL 数据库中提取一些数据 然后从 PostgreSQL 数据库中提取一些数据 但是 从 RMySQL 加载 MySQL 驱动程序会阻止我从以下位置加载 PostgreSQL 驱动程序 PostgreSQL
  • 如何列出表中的所有列?

    对于各种流行的数据库系统 如何列出表中的所有列 对于 MySQL 请使用 DESCRIBE name of table 只要您使用 SQL Plus 或 Oracle 的 SQL Developer 这也适用于 Oracle
  • 从 JSON 数组创建标记 php mySQL Google Maps v2 android

    我正在尝试从 mySQL 数据库在 Google Maps v2 上创建标记 但它不起作用 地图确实出现了 但没有标记 谁能告诉我出了什么问题以及我需要改变什么 我也尝试过让 getDouble 为 getDouble 0 和 getDou
  • mysql计算唯一行值

    TABLE quotation id clientid 1 25 2 25 3 25 4 25 5 26 如何查询有多少个不同的客户端TABLE quotation 我不希望重复的条目被计算多次 我需要的答案是2 在 1 行中 因为唯一的非
  • 我可以使用带有较新 JDK 的 ant 来编译较旧 Java 版本的 java,以便在编译使用较新 API 的代码时生成输出吗?

    我只想在我的系统上安装 JDK 8 并让 ant javac 编译操作为 java 6 环境创建工作类文件 如果我在语法上仅使用符合 java 6 的代码 那么这种方法就有效 但我的代码可以访问 java 8 API 的方法 类 并且根据
  • 获取列名称以及 JSON 响应

    我有三个实体类 我编写了包含两个表的联接的查询 表 费用类别 Entity Table name ExpensesCategories public class ExpensesCategories Id GeneratedValue st
  • 使用 cfchart 标签在单个饼图中显示多个查询的数据

    请考虑以下代码 现在我的代码中有以下代码 cfm页面内的 tag DataSource xx xx x xx Name of the database sgemail Name of the relevant column event vc
  • PHP实现的机票预订系统

    如何防止预订系统中的座位被重复预订 我正在用 PHP 和 MYSQL 制作一个航空旅行预订系统模型作为一个项目 我有一个小问题 仅在付款后 门票和座位详细信息才会永久存储在此处 座位号在付款前分配 假设人 1 预订了飞机上的座位 x 并支付
  • 为什么将 MySQL 凭据放在 www 目录之外? [复制]

    这个问题在这里已经有答案了 可能的重复 将核心类放在 Web 根目录之上 好还是坏主意 https stackoverflow com questions 3648739 putting core classes above the web
  • mysql 在 sum() 函数上使用 concat,例如 concat(sum(col1),"%")

    我正在尝试合并多个查询 但其中一个查询使用 sum 当我尝试在此列上应用 concat 时 我得到不需要的 blob 结果 我如何在聚合列上应用 concat 和 union 我期待这个结果 SELECT row 1 col1 UNION
  • java中如何知道一条sql语句是否执行了?

    我想知道这个删除语句是否真的删除了一些东西 下面的代码总是执行 else 是否删除了某些内容 执行此操作的正确方法是什么 public Deleter String pname String pword try PreparedStatem
  • MYSQL:SQL查询获取自增字段的值

    我有一张桌子 主键是id及其自动递增 现在 当我插入新记录时 我需要获取更新记录的 id 我怎样才能做到这一点 如果我使用查询 select max id from table name 执行后我可以获得id 但我能确定它是刚刚插入的记录的
  • Mysql获取特定表的最后一个id

    我必须从特定的插入表中获取最后的插入 ID 可以说我有这个代码 INSERT INTO blahblah test1 test 2 VALUES test1 test2 INSERT INTO blahblah2 test1 test 2
  • #1115 - 未知字符集:'utf8mb4'

    我的电脑上运行着一个本地网络服务器 用于本地开发 我现在正处于导出数据库并导入到我的托管 VPS 的阶段 导出然后导入时出现以下错误 1115 未知字符集 utf8mb4 有人能指出我正确的方向吗 该错误明确表明您没有utf8mb4您的阶段
  • 使用 DBCP 配置 Tomcat

    在闲置一段时间 几个小时 后 我们收到了 CommunicationsException 来自 DBCP 错误消息 在异常中 位于这个问题的末尾 但我没有看到任何配置文件中定义的 wait timeout 我们应该看哪里 在 tomcat

随机推荐