2015-12-14 34 views
0

我在工作中使用OpenJPA。 有時我必須使用JPQL,有時我必須使用本機查詢(em.createNativQuery)。OpenJPA:JPQL vs原生查詢

我目睹與本機查詢的一個大問題。我也必須提供模式名稱。

喜歡JPQL我可以這樣寫:

em.createQuery("Select e from Entity_name e").getResultList(); 

但在本地查詢的情況下,我需要做的:

em.createNativeQuery("Select e from SCHEMANAME.Table_name e").getResultList() 

爲什麼會這樣,是不是這個錯誤的行爲模式名稱可能隨時間而變化。

回答

0

嘗試在您的配置中指定以下屬性。

<property name="openjpa.jdbc.Schema" value="SCHEMANAME"/> 

如果您同時使用JPQL和本機查詢,請嘗試添加實際的實體,如下所示。

Query query = em.createNativeQuery("SELECT * FROM MAG", Magazine.class);

否則像髒讀,丟失更新.etc

UPDATE

Query createNativeQuery(java.lang.String sqlString, 
         java.lang.Class resultClass) 

執行創建查詢的情況下,你可能會面臨數據不一致的問題一個本地SQL查詢。

參數:的SqlString - 原生SQL查詢字符串

resultClass - 類產生的實例(S)

希望這有助於中。

+0

我已在persistence.xml中擁有模式名稱。 – Mandroid

+0

@Mandroid:你有沒有嘗試像我的答案**例**中所示的那樣傳遞實例類? –

+0

嗨Tharindu,我沒有那樣做。其實我的SQL字符串有2個不同的表。如何處理這種情況? – Mandroid