使用Springboot 2.7.2和Hibernate 5.6与Oracle 12.2一起编写Web应用程序。我使用存储库模型执行插入并使用mockmvc进行测试。打开SQL调试,在执行插入语句时出现错误ORA 32575。在调试日志中,它具有INSERT INTO TABLE(COL 1,COL 2,ID)VALUES('X','Y',DEFAULT)。Oracle错误32575如下。有问题的ID字段是Hibernate pojo的一部分,是主键并使用GenerationType. SEQUENCE。它是指向表的实体。
数据源是使用ojdbc8.jar的“瘦”驱动程序。数据源是在Tomcat启动期间使用应用程序中的@Configuration”注解设置的。如果您单独使用所有这些,我不会得到上面的错误。
但是,我需要通过PROXY USER帐户连接到每个数据库用户,因为我们使用Oracle Label Security。它看起来类似于GRANT CONNECT TO userX THROUGH proxyuser。使用数据库驱动程序时,它将类似于
Properties proxyProps = new Properties()
proxyProps.set(Connection.PROXY_USER_NAME, user)
oraCon.openProxySession(Connection.PROXYTYPE_USER_NAME)
这是在一个名为ProxyDelegatingDatasourceThin的应用程序类中完成的,它扩展了DelegatingDataSource,这是一个Spring类,我相信当进行新的连接尝试时会调用它。
同样,查询工作正常,更新似乎也正常,这只是INSERTS。ID列本身被设置为NUMBER,并被标记为主键。它没有被设置为任何类型的IDENTITY列。
这个错误似乎是想把ID列从INSERT语句中全部省略掉,但是Hibernate或Spring正在用与ID关联的VALUES中的DEFAULT生成它。
我希望有人能帮忙,花了好几天的时间。
1.将@ID列设置为可空、可插入、可更新,所有设置均为false
1.尝试从实体管理器(EntityManager)使用merge和persist,而不是使用Spring Repository保存()方法。
1.隐式缓存属性设置为true
这个错误似乎是想把ID列从INSERT语句中全部省略掉,但是Hibernate或Spring正在用与ID关联的VALUES中的DEFAULT生成它。
正在添加更多信息...
当我删除上面打开代理会话的代码时,我没有得到错误。我还在使用代理会话时从数据库上下文打印了一些信息,代理用户是代理帐户,会话用户是通过代理帐户连接的用户。
无论我使用Oracle Thin Driver还是UCP,我都能得到相同的结果。
1条答案
按热度按时间nuypyhwy1#
此错误已通过使用Oracle驱动程序ojdbc8.jar的更新版本解决