如何获取具有相同电话号码的对象列表

dwbf0jvd  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(354)

我有一个实体 driving_info 有很多字段,但其中一个是电话号码(从中订购)。我要做的是获取从该号码订购的所有驱动器。但是当我试图传递 phoneNumber 我明白了

query did not return a unique result: 5; nested exception is javax.persistence.NonUniqueResultException: query did not return a unique result: 5
org.springframework.dao.IncorrectResultSizeDataAccessException: query did not return a unique result: 5; nested exception is javax.persistence.NonUniqueResultException: query did not return a unique result: 5

实际上,我想要的是结果列表,这样我就可以得到从该电话号码订购的所有驱动器列表的响应。
我的控制器方法是

@GetMapping("/users/{phone}")
public List<User> getUserByPhone(@PathVariable int phone) {
   List<User> users= userService.findByPhone(phone);
   if(users == null) {
        throw new RuntimeException("User not found with "+phone+" phone number");
    }
    return users;
}

我的刀是

@Override
@Transactional
public List<User> findByPhone(int phone) {
    Session currentSession = entityManager.unwrap(Session.class);
    Query<User> theQuery = currentSession.createQuery("from User where phone=:phone",User.class);
    List<User> users = theQuery.getResultList();

    return users;
}
vaqhlq81

vaqhlq811#

请尝试以下方式更正您的查询:

List<User> users = currentSession.createQuery(
   "select u from User u where u.phone = :phone",
   User.class
).setParameter( "phone", phone )
.getResultList();

请注意,正如文件中所述:
即使hql不需要 select_clause ,这通常是一个很好的做法。对于简单的查询,目的是明确的,因此 select_clause 很容易推断。但对于更复杂的查询,情况并非总是如此。
通常最好明确指定意图。hibernate实际上并不强制 select_clause 但是,即使在解析jpql查询时,对jpa可移植性感兴趣的应用程序也应该注意这一点。

oxiaedzo

oxiaedzo2#

你需要打电话 theQuery.list() 相反。

相关问题