Hibernate: значение, сгенерированное запросом SQL - PullRequest
1 голос
/ 09 августа 2010

Я хочу, чтобы Hibernate 3.3.0 сгенерировал значение, выполнив запрос SELECT перед INSERT (persist()). Который будет работать так:

@Generated(GenerationTime.INSERT)
@GenerateSQL("SELECT RANDOM() * 2")
private int number;

Я посмотрел на @Generated(), это хорошо для TRIGGER с. Я не хочу вводить триггер.

Я также посмотрел на @Formula, это только для чтения.

Итак, какова правильная комбинация аннотаций? Спасибо.

1 Ответ

1 голос
/ 09 августа 2010

Я хочу, чтобы Hibernate 3.3.0 генерировал значение, выполняя запрос SELECT до INSERT

Я не думаю, что это поддерживается.

Альтернатива # 1: Вы можете выполнить SELECT как часть логики «создания» непосредственно в своем коде.

Альтернатива # 2: использовать перехватчик Hibernate, предоставить ссылку на SessionFactory и выполнить ВЫБОР в течение onSave от перехватчика.

Итак, какова правильная комбинация аннотаций?

Настройка значений по умолчанию фактически не поддерживается (см. ЧЧХ-4341 ), и самым простым решением было бы IMO определить значение DEFAULT на уровне столбца. Это будет моя альтернатива # 3 . Ниже приведен пример:

@Generated(GenerationTime.INSERT)
@Column(insertable=false, columnDefinition="INT DEFAULT 20") 
private int someNumber;

Я не знаю, подходит ли вам этот вариант, и я не уверен, что использование RANDOM() в DEFAULT будет поддерживаться базой данных (как, кстати, RANDOM() * 2 может стать int? ).

...