为什么未设置TIMESTAMP DEFAULT CURRENT_TIMESTAMP?

时间:2019-07-31 22:18:56

标签: oracle jpa timestamp default

我以此方式定义了Oracle表:

CREATE TABLE MANUAL_CORRECTION
(
    ID                NUMBER(19,0) NOT NULL,
    MODIFIED          TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    MODIFIED_BY       NUMBER(19,0) NOT NULL,
    MODIFIED_PROPERTY VARCHAR2(20 BYTE) NOT NULL,
    OLD_VALUE         VARCHAR2(20 BYTE) NOT NULL,
    NEW_VALUE         VARCHAR2(20 BYTE) NOT NULL,
    CONSTRAINT MODIFIED_BY_FK FOREIGN KEY (MODIFIED_BY) REFERENCES BENUTZER (ID) ENABLE,
    PRIMARY KEY (ID)
);

我想通过JPA插入记录,但效果很好,但是MODIFIED列始终保持NULL,尽管我指定默认情况下应将其设置为系统时间戳。 每当新实体/记录持续存在时,如何实现设置系统时间戳?

这是我定义column / entity属性的方式:

  @Column(name = "MODIFIED", nullable = false, updatable = false, insertable = false, columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
  private Timestamp modified;

1 个答案:

答案 0 :(得分:1)

我认为您的JPA正在显式发送NULL作为列的值,并且仅当您未在插入列子句中指定默认值时,才应用默认值。

Insert into <table> (col1, col2) values (1, null) -- col2 - default value will not be applied
Insert into <table> (col1) values (1) -- col2 - default value will be applied

因此,即使在将NULL作为列值显式传递时也要应用默认值,则可以使用Oracle 12c的新功能,即默认为null

请参阅此doc

干杯!