Если в ваших отображениях есть столбец, который управляется исключительно базой данных, вы должны указать это в отображении, чтобы Hibernate не включал его в свои операторы DML.
@Generated(value = GenerationTime.ALWAYS)
@Column("some_calculated_field", insertable = false, updatable = false)
private String someCalculatedField;
Как вы можетевидите, я пометил его как insertable=false
и updatable=false
, так что поле эффективно пропускается при генерации операторов INSERT
и UPDATE
.Это должно устранить проблему с триггером.
Обновление
Я обновил отображение, включив в него @Generated
, чтобы решить проблему с нулевым значением.
При использованииGenerationTime.ALWAYS
, оператор SELECT
будет вызываться после INSERT
и UPDATE
для извлечения значения вычисляемого столбца из базы данных.Если триггер срабатывает только во время INSERT
, вы можете улучшить производительность UPDATE
, изменив аннотацию на GenerationType.INSERT
, чтобы оператор SELECT
работал только на INSERT
.