不能使用java.sql.Date返回List <object>?

时间:2017-09-05 21:22:16

标签: java spring

我有一个带有以下日期导入的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;
    }

}

2 个答案:

答案 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而构建的。