1

我需要访问一个需要设置特定 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()临时设置,并在查询后恢复它,但这会产生并发问题。

4

1 回答 1

1

确保您首先开始事务并使用相同的 EntityManager 进行设置和查询。

于 2012-11-27T14:59:24.367 回答