JPA没有创建TIMESTAMP的TIME部分

时间:2018-02-09 17:37:04

标签: jpa timestamp

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

@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列是timestamp类型并且默认设置为CURRENT_TIMESTAMP只是填充日期部分而不是时间部分。 我尝试正确地触发手动查询和填充时间戳。 我错过了吗?

2 个答案:

答案 0 :(得分:0)

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

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

TemporalType定义日期的精确度。

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

答案 1 :(得分:0)

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