为JPA查询设置oracle NLS_LANG

时间:2012-11-27 13:34:31

标签: oracle jpa nls-lang

我需要访问需要设置某个nls_lang的oracle数据库视图 - 如果不是,则不会使用索引,数据库将永远锁定。我知道这是一个糟糕的笑话设计,但我无法改变。

我可以通过设置系统变量user.country和/或user.language来更改nls_lang,这将正确地更改nls_lang。但是,这将以未知的方式影响我的应用程序,甚至更糟:同一服务器上的其他应用程序。简单地说这不是一个可能的解决方案。

那么如何为单个JPA原生查询设置nls_lang,同时为服务器设置另一个区域设置?它需要是本机查询,因为我从一个不包含实体所需的PK的视图中进行选择。

我试过

entityManager.createNativeQuery("ALTER SESSION set NLS_LANGUAGE = 'American'").executeUpdate();

在运行我的查询之前,但它似乎没有效果,可能是因为查询是在不同的会话中完成的。也许理论上我可以暂时设置Locale.setDefault(),并在查询后恢复它,但这会产生并发问题。

1 个答案:

答案 0 :(得分:0)

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