Зачем вставлять JPA ноль в базе данных - PullRequest
0 голосов
/ 12 июня 2018

У меня есть таблица с датой последнего изменения.Я хочу установить это вручную в моей программе.Как ни странно, JPA правильно читает объект и присутствует дата, поэтому ошибка столбца фактически невозможна.Однако, когда я создаю новый объект сейчас, появляется сообщение об ошибке, что JPA не может записать NULL в поле LastChange Date. (Перед сохранением () EntityManager я проверил, является ли дата NULL и существует ли она) Я использую WAS 9.0 иEclipselink по умолчанию с JPA 2.1


Здесь, в моем классе Testfall:

@Column(Name="LetztesAenderungsdatum",insertable=true,updateable=true)
private java.sql.Date letztesAenderungsdatum

Схема таблицы

    CREATE TABLE Test
    (
        Testfall_Id             INT (7),
        LetztesAenderungsdatum  DATE NOT NULL,
        Name                    VARCHAR (25) NOT NULL,
        Verfahren_FK    INT CONSTRAINT Verfahren_FK REFERENCES 
        Verfahren(VERFAHREN_ID),
        CONSTRAINT testfall_Id PRIMARY KEY(Testfall_Id)
    );

до трассировки стекаSysout с датой: [12.06.18 13: 45: 14: 415 CEST] 0000009f SystemOut O Testfall letztes Aenderungsdatum: 2018-06-12


трассировка стека:

    [12.06.18 13:45:25:289 CEST] 0000009f eclipselink   W   [eclipselink] Ausnahme [EclipseLink-4002] (Eclipse Persistence Services - 2.6.3.WAS-v20170717-04d37b5): org.eclipse.persistence.exceptions.DatabaseException
Interne Ausnahme: java.sql.SQLIntegrityConstraintViolationException: ORA-01400: Einfügen von NULL in ("SCHEMA"."TESTFALL"."LETZTESAENDERUNGSDATUM") nicht möglich

Fehlercode: 1400
Aufruf: INSERT INTO SCHEMA.Testfall (Testfall_Id, Beschreibung, LetztesAenderungsdatum, Name, Verfahren_FK) VALUES (?, ?, ?, ?, ?)
    bind => [5 parameters bound]
Abfrage: InsertObjectQuery(myPackage.beans.Testfall@bcd7e11c)

1 Ответ

0 голосов
/ 12 июня 2018

Вы не устанавливаете дату до вызова persist.Вы также можете включить nullable = false в ваше отображение аннотаций.

то, что вы, вероятно, хотите сделать, выглядит примерно так:

@PreUpdate
protected void onUpdate() {
    letztesAenderungsdatum = new Date();
}

@PrePersist
protected void onPersist() {
    letztesAenderungsdatum = new Date();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...