咨询Hibernate中替代已弃用createQuery()的删除查询方法
问题解决建议
针对你的JPQL查询场景
从截图里的代码select u from User u来看,这是标准的JPQL实体查询,完全可以用createQuery(String, Class)替代废弃的createQuery(String),改写后代码如下:
List<User> userList = em.createQuery("select u from User u", User.class).getResultList();
这个方法会返回TypedQuery<User>,直接调用getResultList()就能得到类型安全的实体列表,无需额外强转。
如果你的查询是原生SQL语句(而非JPQL),则使用createNativeQuery(String, Class)方法:
List<User> userList = em.createNativeQuery("select * from user", User.class).getResultList();
关于Criteria API的选择
Criteria API更适合动态拼接查询条件、查询逻辑复杂,或者想避免硬编码JPQL字符串语法错误的场景。比如实现上述相同查询的Criteria写法:
CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<User> query = cb.createQuery(User.class); Root<User> userRoot = query.from(User.class); query.select(userRoot); List<User> userList = em.createQuery(query).getResultList();
但如果只是简单的静态查询,用createQuery(String, Class)写JPQL会更简洁直观,没必要刻意切换到Criteria API。
内容的提问来源于stack exchange,提问作者OleksiiUA
相关产品推荐
相关产品推荐

