JPA: How to get entity based on field value other than ID?

前端 未结 15 961
时光说笑
时光说笑 2020-12-04 21:08

In JPA (Hibernate), when we automatically generate the ID field, it is assumed that the user has no knowledge about this key. So, when obtaining the entity, user would query

15条回答
  •  难免孤独
    2020-12-04 21:51

    Write a custom method like this:

    public Object findByYourField(Class entityClass, String yourFieldValue)
    {
        CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
        CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(entityClass);
        Root root = criteriaQuery.from(entityClass);
        criteriaQuery.select(root);
    
        ParameterExpression params = criteriaBuilder.parameter(String.class);
        criteriaQuery.where(criteriaBuilder.equal(root.get("yourField"), params));
    
        TypedQuery query = entityManager.createQuery(criteriaQuery);
        query.setParameter(params, yourFieldValue);
    
        List queryResult = query.getResultList();
    
        Object returnObject = null;
    
        if (CollectionUtils.isNotEmpty(queryResult)) {
            returnObject = queryResult.get(0);
        }
    
        return returnObject;
    }
    
        

    提交回复
    热议问题