繁体   English   中英

如何将值传递到JPQL查询中?

[英]How should I pass values into JPQL query?

我正在测试,它将检查对象是否已保存到数据库中。 测试将用唯一值保存对象,然后我要从数据库中获取该对象并检查其是否不为null。 ID是自动生成的,因此我需要按名称查找此对象。

我的测试看起来像这样:

@Test
public void shouldAddNewEmployee(){

    String firstNameTest = "Jon";
    String lastNameTest = "Doe";
    double salary1test = 10.0;
    String salary2test = "10.00";
    String localityTest = "LosAngeles";
    String zipCodeTest = "00-000";
    String streetTest = "LosAngeles str.";
    int streetNumberTest = 10;

    Employee testEmployee = new Employee(
            firstNameTest,
            lastNameTest,
            salary1test,
            salary2test,
            localityTest,
            zipCodeTest,
            streetTest,
            streetNumberTest);

    EmployeeRepository.addNewEmployeeFromCLI(testEmployee);

    String customQueryFindJonDoe = "select e from Employee e where e.firstName = Jon and e.lastName = Doe";
    EntityManager entityManager = JPAUtils.openEntityManager();

    List<Employee> foundJonDoe = entityManager.createQuery(customQueryFindJonDoe).getResultList();

    Assertions.assertNotEquals(null, foundJonDoe);

    if (entityManager.isOpen()) {
        entityManager.close();
    }


} 

运行后我得到错误:

引起原因:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:'where子句'中的未知列'Jon'

该查询应如何显示?

您必须在查询上设置参数:

String customQueryFindJonDoe = 
       "select e from Employee e where e.firstName = :firstname and e.lastName = :lastName";
EntityManager entityManager = JPAUtils.openEntityManager();

TypedQuery<Employee> q = entityManager.createQuery(customQueryFindJonDoe, Employee.class);
q.setParameter("firstname", "Jon");
q.setParameter("lastName", "Doe");

List<Employee> foundJonDoe = q.getResultList();

有关查询的更多信息,您可以在这里找到:

https://docs.oracle.com/javaee/7/tutorial/persistence-querylanguage002.htm#BNBRG https://www.objectdb.com/java/jpa/query

或者您购买一本书https://www.apress.com/de/book/9781484234198

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM