Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Hibernate更新实体,该实体在DB中只有一个字段是可编辑的_Java_Spring_Oracle_Hibernate_Jpa - Fatal编程技术网

Java 使用Hibernate更新实体,该实体在DB中只有一个字段是可编辑的

Java 使用Hibernate更新实体,该实体在DB中只有一个字段是可编辑的,java,spring,oracle,hibernate,jpa,Java,Spring,Oracle,Hibernate,Jpa,我有一个实体类产品,我得到了整个实体的读授权,并且只在数据库中的价格字段上更新授权。因此,每当我调用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> <20

我有一个实体类产品,我得到了整个实体的读授权,并且只在数据库中的价格字段上更新授权。因此,每当我调用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]> 


尝试使用,生成的SQL将仅尝试更新已修改的列,而不是调用default.update()方法实现您自己的更新方法,其中您只需执行HQL update语句,该语句根据对象的值更新一个字段?

也许您可以尝试将实体的其他属性注释为@Column(updateable=false)

,您可以尝试使用jpql/HQL更新该字段,或者将实体的每个其他属性设置为只读属性。