Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA PersistenceException:无法解析类名_Java_Google App Engine_Jpa_Google Cloud Datastore - Fatal编程技术网

Java JPA PersistenceException:无法解析类名

Java JPA PersistenceException:无法解析类名,java,google-app-engine,jpa,google-cloud-datastore,Java,Google App Engine,Jpa,Google Cloud Datastore,我试图创建一个方法,通过GAE中的项目名称来获取项目,但是我得到了以下错误 javax.persistence.PersistenceException:无法解析类名TestProject 我在if语句开始的那一行的下面一段代码中得到了这个错误 public Project getProjectByProjectName(String projectName){ EntityManager em = EMFService.get().createEntityManager();

我试图创建一个方法,通过GAE中的项目名称来获取项目,但是我得到了以下错误

javax.persistence.PersistenceException:无法解析类名TestProject

我在
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是一个类?问错了吗


提前感谢:)

如果项目名称为
TestProject
,则查询应为

SELECT p FROM Project p WHERE p.projectName = 'TestProject'
而不是像你现在这样

SELECT p FROM Project p WHERE p.projectName = TestProject
如果停止使用字符串连接将参数传递给查询,所有这些都不会发生。这使得您的代码容易受到攻击。一旦一个项目名称包含一个单引号,它就会中断。使用参数:

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

如果项目名称为
TestProject
,则查询应为

SELECT p FROM Project p WHERE p.projectName = 'TestProject'
而不是像你现在这样

SELECT p FROM Project p WHERE p.projectName = TestProject
如果停止使用字符串连接将参数传递给查询,所有这些都不会发生。这使得您的代码容易受到攻击。一旦一个项目名称包含一个单引号,它就会中断。使用参数:

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