【发布时间】:2020-01-04 03:57:40
【问题描述】:
我正在使用投影将列的子集检索到 DTO 中。下面是 DTO
QuestionPreviewDto.java
private Long id;
private String question;
private Timestamp datePosted;
public QuestionPreviewDto(Long id, String question, Timestamp datePosted){
this.id = id;
this.question = question;
this.datePosted = datePosted;
}
数据库表
CREATE TABLE question
(
id BIGINT NOT NULL,
question varchar(250) NOT NULL,
date_posted TIMESTAMP,
.....
)
下面是填充 DTO 的存储库方法,其中 QuestionEntity 是映射到数据库表 question 的实体类。
@Query("select new QuestionPreviewDto(id, question, datePosted) from QuestionEntity where id = :id")
QuestionPreviewDto getQuestionPreview(@Param("id") Long id);
上面的查询给了我以下错误
无法在类 [QuestionPreviewDto] 上找到适当的构造函数。预期的参数是:long、java.lang.String、java.util.Date [原因=org.hibernate.PropertyNotFoundException:类中没有合适的构造函数:QuestionPreviewDto]
当datePosted 的类型在数据库和Java 类中为Timestamp 时,不确定为什么Hibernate 期待java.util.Date?
【问题讨论】:
-
仅供参考,Java 中的
Date和Timestamp类现在都已过时,取而代之的是 JSR 310 中定义的现代 java.time 类。Hibernate 和 JPA 2.2两者都支持java.time。对于类似于 SQL 标准TIMESTAMP WITH TIME ZONE类型的数据库列,您应该使用java.time.OffsetDateTime而不是Timestamp。 -
为什么不用
Date或LocalDateTime而不是TimeStamp? -
@ShekharRai 但它仍然需要 util.Date。
-
您确定您对
private java.util.Date datePosted;进行了更改吗?
标签: java spring hibernate date spring-data-jpa