2012-02-18 49 views
0

,因爲我有遇到問題hour..take我作爲一個初學者,請..小煩惱與JPA查詢

查詢很簡單:

public List<String> finArticleByfamille(String famille){ 
EntityManager em = getEntityManager(); 
Query qr= em.createQuery("SELECT a.libel FROM Article a WHERE a.famille_idfamille = '"+famille+"'"); 

return qr.getResultList(); 
} 

我也曾經嘗試這樣做:

public List<String> finArticleByfamille(String famille){ 
EntityManager em = getEntityManager(); 
Query qr= em.createQuery("SELECT a.libel FROM Article a WHERE a.familleIdfamille = '"+famille+"'"); 

return qr.getResultList(); 
} 

「famille_idfamille」 是從表 「彩」 的一個外鍵,見截圖:

enter image description here

誤差來源於此電話:

String famille=famille_produit_fact_direct.getSelectedItem().toString(); 
l_article=(Vector) ajc.finArticleByfamille(famille); 

我得到這個錯誤:

Grave: null 
java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: An  exception occurred while creating a query in EntityManager: 
Exception Description: Error compiling the query [SELECT a.libel FROM Article a WHERE a.famille_idfamille = 'famille2'], line 1, column 38: unknown state or association field [famille_idfamille] of class [glob.entitys.Article]. 
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:252) 
at java.util.concurrent.FutureTask.get(FutureTask.java:111) 
at javax.swing.SwingWorker.get(SwingWorker.java:602) 
at glob.main$32.done(main.java:2068) 
at javax.swing.SwingWorker$5.run(SwingWorker.java:737) 

我尊重同名的數據庫,那麼爲什麼它不工作? (抱歉法語)

+1

發佈未經類中的某些JPQL被定義不完整的創建本機查詢。 JPQL語法是指字段/屬性名稱NOT DB列名稱。 – DataNucleus 2012-02-18 17:48:42

+0

@DataNucleus:是的,我已經在我的回覆中說過這個,我找到了解決方案... – 2012-02-18 18:47:55

回答

0

@Tim Gage的感謝你,我只是發現了一些.. 在我的實體glob.entitys.Article我有familleIdfamille的領域:

@JoinColumn(name = "FAMILLE_IDFAMILLE", referencedColumnName = "IDFAMILLE", nullable = false) 
@ManyToOne(optional = false) 
private Famille familleIdfamille; 

Famille它是另一個實體.. 那麼它是正常的,他不知道famille_idfamille

編輯:

對此有何評論其從文檔:

  • 查詢字符串是指員工的實體,而不是數據庫的表 員工...

然後我把這個:

Query qr= em.createQuery("SELECT a.libel FROM Article a WHERE a.familleIdfamille.idfamille = '"+famille+"'"); 

及其工作; 它是合乎邏輯的,它不起作用,因爲familleIdfamilleFamille實體的實例...

+0

您應該對您所引用的帖子發表評論,或者在原帖中添加修改。添加答案不是在這裏回答的適當方式。 – AHungerArtist 2012-02-18 16:06:05

0

聽起來好像您的glob.entitys.Article缺少您正在嘗試引用的famille_idfamille字段。該查詢在概念上是針對Java對象的,而不是直接針對數據庫的。基於數據庫

,缺少的領域或許應該是這個樣子:

@Basic 
String famille_idfamille; 

雖然顧名思義它可能是一個外鍵?在這種情況下,將其映射爲String可能不合適。這可能是稍後要看的東西。

0

我寧可選擇使用:

em.createNamedQuery(namedQuery); 
的情況下

您使用的是實體類中的namedQuery。

或者,如果你想更具體的查詢,您可以使用your's數據庫引擎本地sintax

em.createNativeQuery(Query);