我应该如何将值传递给 JPQL 查询?
How should I pass values into JPQL query?
我正在进行测试,它将检查对象是否已保存到数据库中。测试将保存具有唯一值的对象,之后我想从数据库中获取该对象并检查它是否不为空。 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();
}
}
在 运行 之后我得到错误:
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'Jon' in 'where clause'
这个查询应该是什么样子的?
您必须在查询中设置参数:
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
我正在进行测试,它将检查对象是否已保存到数据库中。测试将保存具有唯一值的对象,之后我想从数据库中获取该对象并检查它是否不为空。 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();
}
}
在 运行 之后我得到错误:
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'Jon' in 'where clause'
这个查询应该是什么样子的?
您必须在查询中设置参数:
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