【问题标题】:JPA PersistenceException: Class name could not be resolvedJPA PersistenceException:无法解析类名
【发布时间】:2015-06-06 10:00:00
【问题描述】:

我正在尝试创建一种方法来通过 GAE 的项目名称获取项目,但我收到以下错误。

javax.persistence.PersistenceException: Class name TestProject could not be resolved

我在ifstatement 开始处的以下代码中收到此错误

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是一个类?查询错了吗?

提前致谢:)

【问题讨论】:

    标签: java google-app-engine jpa google-cloud-datastore


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2018-03-15
      • 1970-01-01
      • 2015-05-23
      • 1970-01-01
      • 1970-01-01
      • 2018-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多