【问题标题】:createQuery with JPQL hangs带有 JPQL 的 createQuery 挂起
【发布时间】:2016-07-15 09:32:16
【问题描述】:

当我调用 createQuery(String, Class) 时,应用程序挂起。 Hibernate 的最后一个 INFO 是“使用 ASTQueryTranslatorFactory”,但随后什么也没有发生。代码如下:

public User getUserByLogin(String username) {
    String queryString = "SELECT u FROM USERS u WHERE u.USERNAME = :username";
    TypedQuery<User> query = entityManager.createQuery(queryString, User.class);
    return query.setParameter("username", username).getSingleResult();
}

它挂在TypedQuery&lt;User&gt; query = entityManager.createQuery(queryString, User.class);

但有趣的是,当我像这样更改方法主体时:

public User getUserByLogin(String username) {
    CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
    CriteriaQuery<User> criteriaQuery = criteriaBuilder.createQuery(User.class);
    Root<User> userRoot = criteriaQuery.from(User.class);
    criteriaQuery.select(userRoot).where(criteriaBuilder.equal(userRoot.get("username"), username));
    TypedQuery<User> query = entityManager.createQuery(criteriaQuery);
    return query.getSingleResult();
}

它工作正常。相同的环境,只是方法不同。我错过了什么?

【问题讨论】:

    标签: java hibernate jpa jpql


    【解决方案1】:

    为什么是FROM USERS u 而不是FROM USER u

    【讨论】:

    • USERS 是数据库表名。
    • 是的,那就错了。使用 JPQL,您需要查询实体名称而不是表名称。
    猜你喜欢
    • 2012-04-12
    • 2018-03-13
    • 1970-01-01
    • 2010-10-17
    • 2011-03-08
    • 2014-02-04
    • 1970-01-01
    • 2021-08-12
    • 2020-10-02
    相关资源
    最近更新 更多