当前位置: 首页 > 面试题库 >

使用JPA2 / Hibernate持久化java.time.Instant(JDK8)

范轶
2023-03-14
问题内容

JPA和Hibernate当前都不支持JDK8中JSR-310带来的新日期/时间类(JPA
票证,Hibernate
票证)。尽管如此,我还是希望使用JDK8日期/时间类进行编码,因为它们最终经过了精心设计。特别是,我对感兴趣java.time.Instant,而不是不完全支持所有java.time.*类型,因为我的所有实体都将使用此特定类(或者,所以我认为现在至少是:-)

一种选择是编写一个JPA 2.1定义的类型转换器。但是,我们的应用服务器是JBoss EAP 6.3,它与JPA
2.0兼容,但与2.1不兼容,因此暂时不存在此问题。

下一个选项是使用Hibernate用户类型(此处是有关转换其他JSR-310类的博客文章)。

有更好的选择吗?谢谢。


问题答案:

在Hibernate 5.2及更高版本中,此问题已得到更全面的解决-您不再需要包含hibernate- java8Ipandzic注释中的依赖项,并且可以使用java.time.*诸如LocalDateTimeInstant不具有任何其他步骤的类。您也不再需要使用java.util.LocalDateTimeetc
标记列Temporal,这是您使用旧java.util.Date方法的方式。

从Hibernate 5.2开始,hibernate-java8内容已合并到hibernate-core
此处,查看更改说明。



 类似资料:
  • 持久化类(Persistent Object )简称 PO,在 Hibernate 中, PO 是由 POJO(即 java 类或实体类)和 hbm 映射配置组成。 简单点说,持久化类本质上就是一个与数据库表建立了映射关系的普通 Java 类(实体类),例如 User 类与数据库中 user 表通过映射文件 User.hbm.xml 建立了映射关系,此时 User 就是一个持久化类。 持久化类的规

  • 问题内容: 您好,我对hibernate世界非常陌生,似乎遇到了障碍。我需要存储的对象中有一个哈希映射。 事情是,我永远不需要使用此映射进行搜索,排序或做任何事情,我只需要将其与对象一起保存并在加载对象时加载它,因此我希望hibernate可以通过某种方式对其进行序列化然后将其存储在CLOB或BLOB字段中,但是我似乎找不到任何方法。 所以我接下来试图让hibernate保存这样 但这在运行时给了

  • 问题内容: 我试图在spring启动时将JSON对象存储在MySQL数据库中。我知道我做错了事,但是我无法弄清楚到底是什么原因,因为我对Spring还很陌生。 我有一个休息端点,在这里我通过HTTP PUT获取以下JSON对象,并且需要将其存储在数据库中,以便用户以后可以通过HTTP GET获取它。 请注意,在上述情况下,对象 中* 键 的 数量 可能会有所不同,由于该要求,我正在使用a 来捕获控

  • 我正在阅读JPA 2.1规范,有这个片段: 通过调用新实体实例上的persist方法或级联persist操作,新实体实例将同时成为托管实例和持久实例。应用于实体X的持久化操作的语义如下:。。。 是否可以在不显式调用persist()方法的情况下调用persist操作,或者persist操作始终必须是通过调用persist()的触发器? 假设我有两个实体A和B,其中A与B有一个域(cascade=P

  • 我想使用Hibernate(4.3.6 Final)持久化一个以基本类型为键、非实体可嵌入复合类型值为值的映射。 我没有任何问题的基本类型作为键和值,我做了所有的方式一样,这是好的。当我将map值更改为可嵌入复合类型时遇到了问题,如下所示。 但我得到了错误: 原因:com.mysql.jdbc.exceptions.jdbc4.mysqlSyntaxerrorexception:“field li

  • 1. 前言 本节课和大家聊聊持久化对象的 3 种状态。通过本节课程,你将了解到: 持久化对象的 3 种状态; 什么是对象持久化能力。 2. 持久化对象的状态 程序运行期间的数据都是存储在内存中。内存具有临时性。程序结束、计算机挂机…… 内存中的数据将不复存在。 重要的数据,需要使用持久化技术将数据保存到永久性设备上。Hibernate 能够通过 PO(持久化对象) 将数据持久化到数据库。 Hibe