【问题标题】:JPA is not creating TIME part of TIMESTAMPJPA 没有创建 TIMESTAMP 的 TIME 部分
【发布时间】:2018-02-09 17:37:04
【问题描述】:

我有一个像下面这样的实体

@Entity
@Table(name="PRODUCTS")
public class Feed implements Serializable{

    private static final long serialVersionUID = -1732936132016478456L;
    @Id
    @GeneratedValue( strategy = GenerationType.AUTO)
    @Column(name = "ID")
    private int id;

    @Column(name = "IMAGE_PATH")
    private String imagePath;

    @Column(name = "DESCRIPTION")
    private String description;

    @ManyToOne
    @JoinColumn(name="UPLOADER", nullable = false)
    private User uploader;

    @Column(name = "TAGS")
    private String tags;

    @Column(name = "DATE", columnDefinition="")
    private Date date;

    @Column(name = "LINK")
    private String link;
}

我正在使用下面的代码来创建实体

@Transactional
    @Override
    public Feed createFeed(Feed feed) {
        this.entityManager.persist(feed);
        this.entityManager.flush();
    }

一切工作正常,但时间戳类型的 DATE 列默认设置为 CURRENT_TIMESTAMP 仅填充日期部分而不是时间部分。 我尝试触发手动查询并正确填充时间戳。 我有什么遗漏吗?

【问题讨论】:

    标签: jpa timestamp


    【解决方案1】:

    如果日期是java.sql.Date 类型,JPA 只会将日期部分存储在数据库字段中。

    如果是java.util.Date,则必须添加@Temporal(TemporalType.TIMESTAMP) 才能同时存储时间部分。

    TemporalType 定义了日期的精度。

    https://docs.oracle.com/javaee/6/api/javax/persistence/TemporalType.html

    【讨论】:

    • 早些时候我使用 Temporal 一些不同的原因。刚刚又试了一次,但失败了。仍然只更新日期。
    • 需要注意的一点:我自己没有更新日期字段。我希望 DB 更新它,因此我将 current_timestamp 作为该列的默认值
    • 您使用的是什么数据库,您的日期是什么数据类型?
    • 我用的是mysql,类型是时间戳
    【解决方案2】:

    我得到了解决方案。 我仍然不知道原因,这就是为什么我没有将此标记为答案。 我用@Temporal(TemporalType.DATE) 注释了我的日期变量,就这样成功了。 需要注意的一件事:我使用过 java.util.Date

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-10
      • 2011-07-22
      • 2021-11-12
      • 2020-09-20
      • 2012-04-04
      • 2011-03-14
      • 2021-10-03
      • 2011-12-25
      相关资源
      最近更新 更多