我需要访问需要设置某个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()
,并在查询后恢复它,但这会产生并发问题。
答案 0 :(得分:0)
确保首先开始事务并使用相同的EntityManager进行设置和查询。