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);
我正在尝试创建一种方法以通过 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);