【问题标题】:Date field not retrieved using JPA未使用 JPA 检索日期字段
【发布时间】:2019-03-16 01:38:06
【问题描述】:

我在 mysql 数据库中有一个名为 course 的表,其中包含以下列:

  • 列表项
  • id - int 主键自动递增
  • 名称 - varchar(250)
  • start_date - 现在默认时间戳()

我定义了以下实体:

@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 data JPA,所以我的 dao 看起来像这样:

public interface CourseRepository extends CrudRepository<Course, Long> {

}

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

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

并将其保存到表中,似乎 id 列是自动递增的,但 date 列是 null,即使它现在定义为默认值。

【问题讨论】:

  • 似乎您在数据库中定义默认值而不是您的实体。那么当它从实体生成像“date=null”这样的sql时,你的数据库会接受还是修改这个值?我相信它会接受 null 作为你的结果
  • Deafult 并不意味着不为空。这里 spring 正在创建一个完整的查询,特别是 db 在该字段中设置为空。 ...有关更多详细信息,请转到:stackoverflow.com/questions/11862188/…

标签: java spring jpa


【解决方案1】:

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

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

然后像下面这样调用save()

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

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

【讨论】:

    【解决方案2】:

    请参考以下示例

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

    【讨论】:

      【解决方案3】:

      您的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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-14
        • 2012-02-01
        • 1970-01-01
        • 2011-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多