Не удается изменить столбец в постоянном методе - Hibernate Trigger - PullRequest
0 голосов
/ 15 мая 2018

Я хочу вставить запись в Hibernate с помощью метода entityManager.persist (entity); но выдает эту ошибку:

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The column can not be modified "TABLE_FIELD" because it is a calculated column or is the result of a UNION operator.
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:258)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1535)

Почему отображается сообщение «Не удается изменить столбец», если я пытаюсь вставить запись?

Информация :
- Я использую JDK 1.7, Spring 4.3.10.RELEASE и Hibernate 4.3.11.Final
- Когда я запускаю INSERT прямо на BD SQL Server, я могу вставить новую запись
- Поле, указывающее на ошибку, имеет значение NULL, но при вставке NULL должно выходить из-за ошибки, а не того, что показывает журнал
- По-видимому, в базе данных есть триггер, с которым hibernate не может справиться

Заранее спасибо за ваши ответы

1 Ответ

0 голосов
/ 15 мая 2018

Если в ваших отображениях есть столбец, который управляется исключительно базой данных, вы должны указать это в отображении, чтобы 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...