0

我有一个 MySQL 数据库(旧版),我正在为其编写 JPA 层。我使用 Hibernate 作为 JPA 提供程序,并已将我的数据库表映射到带注释的 Java 类。

数据库中的一列包含时间戳并具有默认值(全为零,即 0000-00-00 00:00:00,但无论此默认值是否为其他值,问题都是相同的):

releasedate TIMESTAMP DEFAULT '0000-00-00 00:00:00'

注释如下:

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "releasedate", nullable = false, length = 19)
public Date getReleasedate() {
    return this.releasedate;
}

通常,我在创建新条目时需要默认值,因此在持久保存它之前我不会在我的 Java 对象中设置日期(它为空)。

但是,这会导致将日期设置为现在,而不是默认值。

我可以将“可插入”注释元素设置为“false”,但这是不可取的,因为有时我确实想在创建时设置自定义日期。

我还尝试在注释中提供列定义(如此所述),但无济于事。

我确实在读取全零日期时间值时遇到了问题(如此所述),并通过将 JDBC 属性“zeroDateTimeBehavior”设置为“convertToNull”解决了这个问题。这解决了阅读的问题,但写作的问题仍然存在。

有人对在这种情况下该怎么做有任何想法吗?

干杯!

4

1 回答 1

0

通常空值会触发数据库使用字段的默认时间戳。

我不确定如果您的会话是无状态的,实体可能会在 java 字段中保留空值。

于 2013-01-09T13:15:39.380 回答