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

前端 未结 15 925
时光说笑
时光说笑 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<Object> criteriaQuery = criteriaBuilder.createQuery(entityClass);
        Root<Object> root = criteriaQuery.from(entityClass);
        criteriaQuery.select(root);
    
        ParameterExpression<String> params = criteriaBuilder.parameter(String.class);
        criteriaQuery.where(criteriaBuilder.equal(root.get("yourField"), params));
    
        TypedQuery<Object> query = entityManager.createQuery(criteriaQuery);
        query.setParameter(params, yourFieldValue);
    
        List<Object> queryResult = query.getResultList();
    
        Object returnObject = null;
    
        if (CollectionUtils.isNotEmpty(queryResult)) {
            returnObject = queryResult.get(0);
        }
    
        return returnObject;
    }
    
    0 讨论(0)
  • 2020-12-04 21:53

    No, you don't need to make criteria query it would be boilerplate code you just do simple thing if you working in Spring-boot: in your repo declare a method name with findBy[exact field name]. Example- if your model or document consist a string field myField and you want to find by it then your method name will be:

    findBymyField(String myField);

    0 讨论(0)
  • 2020-12-04 21:54

    This solution is from Beginning Hibernate book:

         Query<User> query = session.createQuery("from User u where u.scn=:scn", User.class);
         query.setParameter("scn", scn);
         User user = query.uniqueResult();    
    
    0 讨论(0)
提交回复
热议问题