我试图通过GAE的项目名称创建一个方法来获取项目,但是我收到了以下错误。
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认为testproject是一个类?查询错了吗?
提前致谢:)
答案 0 :(得分: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);