Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用CriteriaQuery和EntityManager进行查询(Hibernate)_Hibernate_Jpa_Entitymanager - Fatal编程技术网

使用CriteriaQuery和EntityManager进行查询(Hibernate)

使用CriteriaQuery和EntityManager进行查询(Hibernate),hibernate,jpa,entitymanager,Hibernate,Jpa,Entitymanager,如何使用CriteriaQuery和EntityManager为此SQL查询创建查询: SELECT * FROM user WHERE user.login = '?' and user.password = '?' 我尝试这样做: final CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder(); final CriteriaQuery<User> c

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

SELECT * FROM user WHERE user.login = '?' and user.password = '?' 
我尝试这样做:

        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);
final CriteriaBuilder CriteriaBuilder=getEntityManager().getCriteriaBuilder();
final-CriteriaQuery-CriteriaQuery=criteriaBuilder.createQuery(User.class);
Root=criteriaQuery.from(User.class);
criteriaQuery.select(root);
其中(criteriaBuilder.gt(root.get(“login”),userLogin));
返回getEntityManager().createQuery(criteriaQuery).getResultList().get(0);

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

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);
CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaQuery q=cb.createQuery(User.class);
根c=q.from(User.class);
q、 选择(c);
ParameterExpression p1=cb.parameter(String.class);
ParameterExpression p2=cb.parameter(String.class);
q、 在哪里(
cb.equal(c.get(“登录”),p1),
cb.equal(c.get(“密码”),p2)
);
返回em.createQuery(q).getResultList().get(0);

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

这对我有效,最后是:

    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();
entityManager.getTransaction().begin();
CriteriaQuery CriteriaQuery=criteriaBuilder.createQuery();
Root-fromRoot=criteriaQuery.from(Profile.class);
criteriaQuery.select(fromRoot);
其中(criteriaBuilder.equal(fromRoot.get(“用户名”),userName),
equal(fromRoot.get(“password”)、password);
List resultList=entityManager.createQuery(criteriaQuery).getResultList();
Profile dbProfile=null;
if(resultList.isEmpty()){
//处理错误
}否则{
dbProfile=(Profile)resultList.get(0);
}
entityManager.getTransaction().commit();

非常感谢