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

最新的Spring Data/Hibernate在本地查询中不支持java.time.LocalDate?

施翰学
2023-03-14

问题:带有Spring数据返回日期的本机查询返回java.sql.date而不是java.time.LocalDate(尽管设置了)。

上下文:一个带有Spring Boot 2.0.0.M5(最新版本)、Hibernate 5.2.11、Hibernate-Java8 5.2.12(只要JSR310类位于类路径上,就支持它)的新项目。

以下匿名示例(该应用程序不是真正关于生日的):

public interface BirthdayRepository<T, ID extends Serializable> extends Repository<T, ID> {
    @Query(value = "select day from birthdays", nativeQuery = true)
    Iterable<java.sql.Date> getBirthdays(); //the return type should ideally be java.time.LocalDate
}

编辑:对于任何有同样问题的人,下面是解决方案,由延斯建议的转换器。

public class LocalDateTypeConverter {

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

        @Nullable
        @Override
        public Date convertToDatabaseColumn(LocalDate date) {
            return date == null ? null : new Date(LocalDateToDateConverter.INSTANCE.convert(date).getTime());
        }

        @Nullable
        @Override
        public LocalDate convertToEntityAttribute(Date date) {
            return date == null ? null : DateToLocalDateConverter.INSTANCE.convert(date);
        }
    }

共有1个答案

华温书
2023-03-14

看起来你在转换器上发现了一个缺口。Spring数据可以在java.util.datejava.time.localdate之间进行现成的转换,但不能在java.time.localdatejava.time.localdate以及java.sql.date包中的其他日期和时间相关类型之间进行转换。

您可以创建自己的转换器来做到这一点。您可以使用Jsr310JpaConverters作为模板。

此外,您可能希望创建一个特性请求,如果您构建了一个转换器供您使用,您甚至可以提交一个拉请求。

 类似资料:
  • [root@PPWFMD509bin]#./线程“main”java.lang.UnsupportedClassVersionError:org/apache/cassandra/cli/CliMain:Unsupported major中的cassandra cli异常。在java.lang.ClassLoader的51.0次要版本。java.lang.ClassLoader.defineCla

  • 问题内容: 我正在 引发该异常的代码。我正在从无限运行的线程调用刷新,直到有要刷新的数据为止。 编辑:我正在调用独立线程中的刷新,因为数据存储列表包含数据。从我看来,它是对刷新的同步操作调用,因此理想情况下,刷新应在事务完成之前不返回。我希望这种方式是我最不希望看到的。由于它是一个独立的线程来完成其工作,因此我所关心的只是刷新操作是同步操作。现在我的问题是,txD.commit是异步操作吗?它在该

  • 我有实体: 和存储库接口: 执行查询时:

  • Hibernate 版本 4.2.3.Final 是否支持类型安全的本机命名查询?我得到这个例外与一个: 当我使用Query类执行此查询时,一切都很好。TypeQuery似乎是这里的问题,异常不是很有帮助。我已经尝试过对非常复杂的查询进行简单查询,除非我将Query用于命名的本机查询,否则它们似乎都失败了。

  • 我已经检查了我正在使用所有最新的NuGet库版本。有人能给我提示一下还有什么要查吗?这是代码: