hibernate - 如何在使用 Hibernate 保存时使用 DB 端默认值?

标签 hibernate jpa default sysdate

我在数据库中有一个列,默认值为sysdate。我正在寻找一种方法来插入默认值,同时我没有向应用程序端的相应属性提供任何内容。 顺便说一下,我正在使用基于注释的配置。

有什么建议吗?

最佳答案

日期列在插入时获取 null 值的原因是,即使它在 dbms 端定义为 default SYSDATE ,也是因为 default 仅当查询中未为该列指定值时,才使用该列的值。这意味着它不能出现在 INSERT INTO 句子中,即使它已被赋予 null

如果您想在 DBMS 端使用默认 SYSDATE,则应将 @Column 配置为 insertable=false以便从 SQL INSERT 中获取该列。

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

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

还有一种方法可以替代使用 DBMS 的默认 SYSDATE 定义。您可以使用 @PrePersist@PreUpdate当且仅当尚未分配时,在保存/更新之前将当前日期分配给属性的注释:

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

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

关于hibernate - 如何在使用 Hibernate 保存时使用 DB 端默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14703697/

相关文章:

java - Hibernate JPA 持久保存父 ID 为空的子实体

java - 没有所有属性的 hibernate 映射文件

java - Jpa不刷新删除

java - 连接池配置是否保存在 JPA 上下文之外?

java - 当我使用 @IdClass LinkedHashSet 时包含重复的项目

java - 如何告诉 hibernate 在日志中打印列名而不是列号?

java - Spring Data JPA规范,如何在唯一的sql请求中获取@JoinColumn数据

icons - 如何重置 Windows XP 中的默认 .EXE 图标

html - 如何将 <a class ="class"> 设置为默认属性给定 <a> 的属性已经在 css 中定义

java - 如何在 Java 程序中通过 java.net.URL 类监控打开的 URL?