2012-11-27 40 views
0

我需要訪問需要設置某個nls_lang的oracle數據庫視圖 - 如果不是,則不會使用索引,並且數據庫將永遠鎖定。我知道這是不好的笑話設計明智的,但它是我可以改變的。對於JPA查詢設置oracle NLS_LANG

我可以通過設置系統變量user.country和/或user.language來更改nls_lang,這將正確更改nls_lang。但是,這會以未知的方式影響我的應用程序,甚至更糟:同一服務器上的其他應用程序。簡單地說,這不是一個可能的解決方案。

那麼,如何爲單個JPA本機查詢設置nls_lang,同時爲服務器設置另一個區域設置?它需要是一個本地查詢,因爲我從一個不包含實體需要的PK的視圖中進行選擇。

我已經試過

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

運行我的查詢之前,但它似乎並不具有效力,可能是因爲該查詢在不同的會議上完成的。也許在理論上我可以暫時設置Locale.setDefault(),並在查詢後恢復它,但這會產生併發問題。

回答

0

確保您先開始事務並使用相同的EntityManager進行設置和查詢。

+0

這是一個JTA實體經理,所以我無法控制交易。 –

+0

然後確保您處於JTA交易中。 – James

+0

我是,改變會議似乎沒有工作,所以我假設在第二個查詢中有一個新的會話。 –