spring 如何通过Sping Boot JPA / Hibernate动态更改Oracle模式

e5nszbig  于 2023-03-22  发布在  Spring
关注(0)|答案(1)|浏览(167)

在我的例子中,每当我执行查询时,都会在会话中设置默认模式。
因此,通过使用EntityManager本地查询,我将根据我的请求使用更新的模式更改会话。

CreateNativeQuery(alter session set current_schema = some_name);

在成功更新后,当我运行我的查询时,它返回的是默认模式而不是更新后的模式?

select sys_context('userenv' , 'current schema') from dual;

我知道spring connection pool在默认情况下创建了这个模式,但是我的问题是,无论如何都可以从代码中动态地更新模式吗

rseugnpd

rseugnpd1#

set current_schema函数仅在查询中没有完全限定对象名称时更改所使用的默认模式,因此

connect schema1/password;
alter session set current_schema = schema2;
select * from table_a;

会和

connect schema1/password;
select * from schema2.table_a;

set current_schema不会更改您实际连接到的架构/用户,因此您的安全配置文件也不会更改。完全限定对象引用也被认为是最佳实践,特别是当它们与您登录的架构不同时。
此外,如果您使用的是连接池,则更改会话只会影响发出命令时碰巧正在使用的一个线程。下次从连接池中获取不同的连接线程时,您将拥有一个具有原始会话参数的不同物理数据库连接。

相关问题