51

我在 DB 中有一个默认值为sysdate. 我正在寻找一种方法来插入默认值,而我没有向应用程序端的相应属性提供任何东西。顺便说一句,我正在使用基于注释的配置。

有什么建议吗?

4

3 回答 3

114

日期列在插入时得到一个值的原因null,即使它被定义为default SYSDATEdbms 端,也是default一个列的值仅在查询中没有给该列赋值的情况下使用。这意味着它不能出现在INSERT INTO句子中,即使它已经给出null

如果你想default SYSDATE在 DBMS 端使用,你应该配置@Columnwithinsertable=false以便从你的 SQL 中获取列INSERT

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "myDate", insertable=false)
private Date myDate;

请注意,在创建实体时,此方法将始终忽略您在应用中提供给属性的值。如果您确实希望有时能够提供日期,也许您应该考虑使用数据库触发器来设置值而不是默认值。

除了使用default SYSDATEDBMS 的定义之外,还有另一种方法。您可以使用@PrePersist@PreUpdate注释在保存/更新之前将当前日期分配给属性,当且仅当它尚未分配时:

@PrePersist
protected void onCreate() {
    if (myDate == null) { myDate = new Date(); }
}

这个密切相关的问题提供了不同的方法:Creation timestamp and last update timestamp with Hibernate and MySQL

于 2013-02-05T09:12:43.943 回答
21

如果您使用的是 Hibernate,那么您可以只使用@CreationTimestamp插入默认日期。

@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "create_date")
private Date createDate;

@UpdateTimestamp在必要时更新值

@UpdateTimestamp
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "modify_date")
private Date modifyDate;
于 2017-04-19T11:14:23.330 回答
0

或者您可以直接初始化 POJO 的属性,例如:

//java code property declaration

private String surname = "default";
于 2013-06-26T09:21:25.410 回答