2017-07-24 52 views
0

休眠拋出這樣的例外:休眠 「org.hibernate.QueryException」

org.hibernate.QueryException: Expected positional parameter count: 2, actually detected 0 
at org.hibernate.query.internal.QueryParameterBindingsImpl.verifyParametersBound(QueryParameterBindingsImpl.java:270) 
at org.hibernate.query.internal.AbstractProducedQuery.beforeQuery(AbstractProducedQuery.java:1309) 
at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1408) 
at org.hibernate.query.Query.getResultList(Query.java:146) 
at pl.code.dao.PersonDAO.personExists(PersonDAO.java:59) 

在這種方法中:

@Override 
public boolean personExists(String firstName, String location) { 
    TypedQuery<Person> query = entityManager.createQuery("Select p FROM Person p WHERE p.firstName = ? and p.location = ?", Person.class); 
    List<Person> all = query.getResultList(); 
    return all.size() > 0 ? true : false; 

} 

我使用Hibernate的版本5.2.9.Final。 任何想法有什麼不對?

+0

你在哪裏指定您的查詢所需的參數。 p.firstName =?和p.location =?「, – user8271644

+0

請你下面的答案來解決問題 – user8271644

回答

0

請使用如下面的例子中你paramters通過

Query q =session.createQuery("select u from User u where u.location=? and u.id in (:user_ids)"); 
    q.setParameter(0, location); 
    q.setParameterList("user_ids", userIds); 
    return q.list(); 
0

我這種方式傳遞參數:

@Override 
public synchronized boolean addPerson(Person person){ 
      if (personDAO.personExists(person.getFirstName(), person.getLocation())) { 
       return false; 
      } else { 
       personDAO.addPerson(person); 
       return true; 
      } 
} 

,並在控制器

@RequestMapping(value= "/person", method = RequestMethod.POST) 
public ResponseEntity<Void> addPerson(@RequestBody Person person, UriComponentsBuilder builder) { 
    boolean flag = personService.addPerson(person); 
      if (flag == false) { 
      return new ResponseEntity<Void>(HttpStatus.CONFLICT); 
      } 
      HttpHeaders headers = new HttpHeaders(); 
      headers.setLocation(builder.path("/person/{id}").buildAndExpand(person.getPid()).toUri()); 
      return new ResponseEntity<Void>(headers, HttpStatus.CREATED); 
} 
+0

但你仍然需要根據下面的答案指定你的參數 – user8271644