问题:带有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);
}
}
看起来你在转换器上发现了一个缺口。Spring数据可以在java.util.date
和java.time.localdate
之间进行现成的转换,但不能在java.time.localdate
和java.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库版本。有人能给我提示一下还有什么要查吗?这是代码: