gpt4 book ai didi

java - JPA持久化异常: Class name could not be resolved

转载 作者:行者123 更新时间:2023-12-01 18:14:13 26 4
gpt4 key购买 nike

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

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

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

关于java - JPA持久化异常: Class name could not be resolved,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30681459/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com