Как мне написать операторы JPA QL, которые подсказывают среде выполнения использовать значение DEFAULT? - PullRequest
1 голос
/ 11 мая 2010

У меня есть такая таблица:

mysql> show create table foo;
CREATE TABLE foo
(
    network bigint NOT NULL,
    activeDate datetime NULL default '0000-00-00 00:00:00',
    ...
)

В доменном объекте FooVO член activeDate помечен как временный.Если я не установлю activeDate на допустимый экземпляр Date, будет добавлена ​​новая запись с NULL.Я хочу, чтобы значение по умолчанию вступило в силу, если я не установил элемент activeDate.

Ответы [ 3 ]

1 голос
/ 27 сентября 2010

Если вы используете EclipseLink, вы можете указать @ReturnInsert (returnOnly = true) для этого. К сожалению, если вы все еще используете Toplink, я нашел единственный способ справиться с этой проблемой - не указывать @Temporal в столбце даты и писать методы-оболочки для преобразования туда и обратно из даты в строку.

0 голосов
/ 21 января 2013

Обычно лучше указывать свои значения по умолчанию в Java, в конструкторе вашего объекта. Затем вы убедитесь, что ваша объектная модель и база данных синхронизированы, и убедитесь, что приложение видит правильные значения по умолчанию при создании новых объектов.

В EclipseLink вы также можете использовать аннотацию @ReturnInsert (для базы данных Oracle), по-прежнему рекомендуется устанавливать ее в Java,

http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/a_returninsert.htm#CIHHEGJE

0 голосов
/ 11 мая 2010

Разве вы не должны использовать NOT NULL для столбца activeDate, если хотите установить значение по умолчанию?

CREATE TABLE foo
(
    network bigint NOT NULL,
    activeDate datetime NOT NULL default '0000-00-00 00:00:00',
    ...
)
...