2015-06-06 72 views
0

我想創建一個方法來從GAE項目名稱獲取項目,但我收到以下錯誤。JPA PersistenceException:無法解析類名稱

javax.persistence.PersistenceException: Class name TestProject could not be resolved

我得到的就行了下面這段代碼這個錯誤的if語句開始

public Project getProjectByProjectName(String projectName){ 
    EntityManager em = EMFService.get().createEntityManager(); 
    Query q = em.createQuery("SELECT p FROM Project p WHERE p.projectName = " + projectName);  
    Project p = null; 
    if(q.getResultList().size() != 0){ 
     p = (Project) q.getSingleResult(); 
    } 
    return p; 
} 

我這樣調用方法:getProjectByProjectName("TestProject");

爲什麼java的思考該測試項目是一個類?查詢是否錯誤?

感謝提前:)

回答

4

如果項目名稱爲TestProject,查詢應該是

SELECT p FROM Project p WHERE p.projectName = 'TestProject' 

,而不是像你正在做

SELECT p FROM Project p WHERE p.projectName = TestProject 

所有這一切不會如果您停止使用字符串連接將參數傳遞給查詢,則會發生。這會使您的代碼容易受到JPQL injection attacks的影響。只要項目名稱包含單引號就會中斷。使用參數:

Query q = em.createQuery("SELECT p FROM Project p WHERE p.projectName = :name"); 
q.setParameter("name", projectName); 
+0

謝謝你解決了我的問題:) –

相關問題