无法使用JPA检索日期字段

时间:2018-10-11 04:18:32

标签: java spring jpa

我在mysql数据库中有一个表,该表称为带有以下列的课程:

  • 列表项
  • id-int主键自动递增
  • 名称-varchar(250)
  • 开始日期-现在的时间戳默认值()

我定义了以下实体:

@Entity
@Table(name = "course")
public class Course {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@Column(name = "start_date")
@Temporal(TemporalType.DATE)
private Date startDate;

protected Course() {

}

public Course(String name) {
    this.name = name;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public Long getId() {
    return id;
}

public Date getStartDate() {
    return startDate;
 }

}

因此,数据库应填充日期列。 我使用Spring数据JPA,所以我的dao看起来像这样:

public interface CourseRepository extends CrudRepository<Course, Long> {

}

我创建了一个新的Course实体(通过上面接受名称的构造函数):

courseRepository.save(new Course("Algebra"));

并将其保存到表中,即使id列现在已默认设置,但id列似乎是自动递增的,而date列却为null。

3 个答案:

答案 0 :(得分:1)

您的start_date是一个时间戳,但是您在模型中使用的是Date

更改

@Column(name = "start_date")
@Temporal(TemporalType.DATE)
private Date startDate;

@Column(name = "start_date", nullable = false, updatable = false)
@CreationTimestamp
private Timestamp startDate; //import java.sql.Timestamp;

答案 1 :(得分:0)

请参考以下示例

@Column(name = "created_date")
@Temporal(TemporalType.TIMESTAMP)
@DateTimeFormat(pattern = "dd/MM/YYYY")
private Date createdDate;

答案 2 :(得分:0)

之所以发生这种情况,是因为您从未设置startDate。更改您的Course类构造函数,如下所示:

public Course(String name, Date startDate) {
    this.name = name;
    this.startDate = startDate;
}

并按如下所示致电save()

courseRepository.save(new Course("Algebra", new Date()));

save方法获取系统的当前日期,并将其保存到数据库中。