我有一个带有以下日期导入的Java Entity类:
import java.sql.Date;
实体宣布日期。在我的存储库中,我有以下查询:
@Query("SELECT new Filmographer (f.name, f.startDate) FROM Filmographers f")
public List<Filmographer> getFilmographers();
但是,当我尝试构建此文件时,收到以下错误:
Unable to locate appropriate constructor on class [Filmographer]
Expected arguments are: java.lang.String, java.util.Date [ SELECT
new Filmographer(f.name, f.startDate) FROM Filmographers f]
如果我从实体和存储库中完全删除日期,它可以正常工作。
有人可以向我解释为什么Java似乎正在为我挑选我的日期声明并且似乎无视我的 java.sql.Date 导入?
更新:Pojo根据要求添加:
package com.example.Filmographer;
import java.io.Serializable;
import java.sql.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="Filmographers")
public class Filmographer implements Serializable {
private static final long serialVersionUID = 1L;
public Filmographer() {}
public Filmographer(
String name,
Date startDate
) {
this.name = name;
this.startDate = startDate;
}
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="filmographerid")
private int filmographerId;
@Column(name="name")
private String name;
@Column(name="startDate")
private Date startDate;
public int getFilmographerId() {
return filmographerId;
}
public void setFilmographerId(int filmographerId) {
this.filmographerId = filmographerId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getStartDate() {
return startDate;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
}
答案 0 :(得分:2)
由于错误试图告诉您,您需要java.util.Date
,而不是sql
。
答案 1 :(得分:1)
预期的参数是:java.lang.String, java.util.Date
正如您所看到的,该函数需要数据类型 java.util.Date而不是java.sql。
现在,Spring是轻量级的主要原因之一是POJO类,如果一个类引用了sql,它就不会是POJO类,因此也就是错误。
现在您可以搜索采用sql.Date的类似方法。但是,此方法不是为处理数据类型java.sql.Date而构建的。