#java #spring #oracle #hibernate #jpa
#java #spring #Oracle #гибернация #jpa
Вопрос:
У меня есть продукт класса entity, который мне был предоставлен для чтения для всего объекта и обновления ТОЛЬКО для поля цены в базе данных. Поэтому всякий раз, когда я вызываю productDao.update(product), даже если я изменил только значение поля price, я получаю
<2020-09-17 14:33:26.735 WARN 26939 --- [ (self-tuning)'] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 1031, SQLState: 42000>
<2020-09-17 14:33:26.735 ERROR 26939 --- [ (self-tuning)'] o.h.engine.jdbc.spi.SqlExceptionHelper : ORA-01031: insufficient privileges>
<2020-09-17 14:33:26.736 INFO 26939 --- [ (self-tuning)'] o.h.e.j.b.internal.AbstractBatchImpl : HHH000010: On release of batch it still contained JDBC statements>
<2020-09-17 14:33:26.737 ERROR 26939 --- [ (self-tuning)'] o.h.i.ExceptionMapperStandardImpl : HHH000346: Error during managed flush [org.hibernate.exception.SQLGrammarException: could not execute statement]>
Комментарии:
1. Ну, вы могли бы попытаться обновить это поле с помощью JPQL / HQL или сделать любое другое свойство вашего объекта свойством, доступным только для чтения.
Ответ №1:
Попробуйте использовать динамическое обновление, сгенерированный SQL попытается обновить только те столбцы, которые были изменены
Ответ №2:
Может быть, вместо вызова метода default .update() реализуйте свой собственный метод обновления, в котором вы просто выполняете оператор обновления HQL, который обновляет одно поле на основе значения вашего объекта?
Ответ №3:
Может быть, вы могли бы попытаться аннотировать другие свойства объекта как @Column(обновляемый = false)