我以此方式定义了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;
答案 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
干杯!