Hibernate/JPA-保存/插入函数失败org.springframework.dao.InvalidDataAc



每次我试图在spring应用程序中调用以下3种JPA保存方法中的一种的POST端点时,我都会收到这个错误:

save()
saveAll()
saveAndFlush()

org.springframework.dao.InvalidDataAccessResourceUsageException:无法提取结果集;SQL[n/a];嵌套异常为org.hubinate.exception.SQLGrammaException:无法提取ResultSet。。。。由以下原因引起:java.sql.SQLSyntaxErrorException:ORA-00942:表或视图不存在。。。。引起原因:oracle.jdbc.OraleDatabaseException:ORA-00942:表或视图不存在

我想首先澄清的几件事:

  1. 我是通过一个非表所有者用户登录的,该用户已被授予选择、插入、更新和;删除权限。我在SQL客户端中进行了测试,以确认我的用户确实可以访问这4个SQL操作
  2. 使用任何其他JPA方法都没有问题,比如findAll,findAllById,计数甚至是我在@Repository类下创建的方法。可以毫无问题地查找和查询表。此外,表或存储库没有任何异常
  3. 当使用";所有者;表的用户我能够成功地保存任何数据而没有问题
  4. 表/存储库是作为依赖项从其他项目导入的

我发现的唯一与这个特定的JPA保存问题有关的是这篇文章,其中提到

Hibernate,PostgreSQL:无法提取结果集,SQLState,实际问题很简单:您在只读事务中调用了save((操作。但是,因为你吞下了你的例外:}<pgsqljdbc(at(postgresql(dot(org>主题:Re:Update ResultSet:Date:提取要更新或抛出"的表名;ResultSet不可更新

我不知道从哪里开始解决这个错误。这些是相关的依赖代码的版本,尽管我也玩过这些,但没有任何运气。

  • org.hibernate:hibernate内核5.4.30.Final(尝试5.4.21.Final(

  • org.hibernate。common:hibernate commons注释5.1.2.Final(已尝试5.1.0.Final(

  • org.springframework.data:spring-datajpa2.4.8(试用2.3.4.版本(

我也将其用作我的属性,它确实成功地验证了我的DB模式,否则服务将在启动时失败。我见过有人说要用";"更新";但是,这并没有帮助,也不应该成为解决方案。

spring.jpa.hibernate.ddl-auto=validate

感谢您的帮助。我不认为这是一个代码问题,但同时我在OracleDB方面找不到任何异常的东西。

我脑海中浮现的一些想法:

  • 检查实体关系。也许你在实体内通过@OneToMany(等(保存了另一个实体,但你没有访问另一个表的权限
  • 如果是Oracle,请检查您正在使用的表的顺序权限。你还需要他们的特权
  • 如果有任何触发因素,您也可以在那里查看您的访问权限

解决方案:

启用后

spring.jpa.show-sql=true

我意识到这是它崩溃前执行的sql的第一行。

Hibernate: select hibernate_sequence.nextval from dual

之所以每个JPA保存操作都使用这个序列,是因为我在表的@Id上使用了@GeneratedValue(策略=GenerationType.AUTO(。为了解决这个问题,我简单地执行了对该SEQUENCE的non_owner_acct的grant权限。

GRANT SELECT ON "SCHEMA"."HIBERNATE_SEQUENCE" TO "NON_OWNER_ACCT";

只需在属性文件中使用hibernate的更新查询

spring.jpa.hibernate.ddl-auto=update

它将刷新和更新您的数据库

我也有同样的问题,但通过这个解决了,它在春季启动中工作

最新更新