我需要访问一个需要设置特定 nls_lang 的 oracle 数据库视图 - 如果不是,则不会使用索引,并且数据库将永远锁定。我知道这是一个糟糕的笑话设计,但我无法改变。
我可以通过设置系统变量user.country
和/或来更改 nls_lang user.language
,这将正确更改 nls_lang。但是,这将以未知的方式影响我的应用程序,甚至更糟:同一服务器上的其他应用程序。简单地说,这不是一个可能的解决方案。
那么如何为单个 JPA 本机查询设置 nls_lang ,同时为服务器设置另一个语言环境?它必须是本机查询,因为我正在从不包含实体所需的 PK 的视图中进行选择。
我试过了
entityManager.createNativeQuery("ALTER SESSION set NLS_LANGUAGE = 'American'").executeUpdate();
在运行我的查询之前,但它似乎没有效果,可能是因为查询是在不同的会话中完成的。也许理论上我可以Locale.setDefault()
临时设置,并在查询后恢复它,但这会产生并发问题。