JPA PersistenceException: Class 名称无法解析

JPA PersistenceException: Class name could not be resolved

我正在尝试创建一种方法以通过 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 是 class?查询有误吗?

提前致谢:)

如果项目名称是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);