首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CriteriaQuery和EntityManager(Hibernate)查询

使用CriteriaQuery和EntityManager(Hibernate)查询
EN

Stack Overflow用户
提问于 2017-05-07 10:55:20
回答 2查看 2K关注 0票数 3

如何为此SQL查询使用CriteriaQuery和EntityManager创建查询:

代码语言:javascript
复制
SELECT * FROM user WHERE user.login = '?' and user.password = '?' 

我试图这样做:

代码语言:javascript
复制
        final CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder();
        final CriteriaQuery<User> criteriaQuery = criteriaBuilder.createQuery(User.class);
        Root<User> root = criteriaQuery.from(User.class);
        criteriaQuery.select(root);
        criteriaQuery.where(criteriaBuilder.gt(root.get("login"), userLogin));
        return getEntityManager().createQuery(criteriaQuery).getResultList().get(0);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-07 11:12:33

您的代码看起来是在正确的轨道上,只不过它只有一个WHERE条件,这与原始的SQL查询不一致,后者有两个条件。

代码语言:javascript
复制
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<User> q = cb.createQuery(User.class);
Root<User> c = q.from(User.class);
q.select(c);
ParameterExpression<String> p1 = cb.parameter(String.class);
ParameterExpression<String> p2 = cb.parameter(String.class);
q.where(
    cb.equal(c.get("login"), p1),
    cb.equal(c.get("password"), p2)
);
return em.createQuery(q).getResultList().get(0);

另外,在现实生活中,您通常不会将原始用户密码存储在数据库中。相反,您正在存储一个已加密的加密密码。因此,希望您的实际程序不是存储原始密码。

票数 1
EN

Stack Overflow用户

发布于 2018-04-26 16:56:37

这对我起了作用,最终是这样的:

代码语言:javascript
复制
    entityManager.getTransaction().begin();

    CriteriaQuery<Object> criteriaQuery = criteriaBuilder.createQuery();
    Root<Profile> fromRoot = criteriaQuery.from(Profile.class);
    criteriaQuery.select(fromRoot);

    criteriaQuery.where(criteriaBuilder.equal(fromRoot.get("userName"), username),
                        criteriaBuilder.equal(fromRoot.get("password"), password));

    List<Object> resultList = entityManager.createQuery(criteriaQuery).getResultList();
    Profile dbProfile = null;
    if (resultList.isEmpty()) {
        // Handle Error
    } else {
        dbProfile = (Profile) resultList.get(0);
    }

    entityManager.getTransaction().commit();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43830633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档