Quiero encontrar registros para related_elements tabla, donde relationId pertenece a una lista de

supongamos un Conjunto tempSet contiene[2,3,4]
Tengo que comprobar el valor de estas contiene en related_element tabla usando jpa criterios de consulta

CriteriaBuilder cb1=entityManager.getCriteriaBuilder();
        CriteriaQuery<RelatedElements> cq1=cb1.createQuery(RelatedElements.class);
        Root<RelatedElements> RelatedElementsRoot=cq1.from(RelatedElements.class);
    for (Integer tSet : tempSet) {
            ParameterExpression<Integer> pRelatedElement=cb1.parameter(Integer.class);
            cq1.multiselect(cb1.count(RelatedElementsRoot.<RelatedElements>get("relatedElementsPk").<Integer>get("relationId"))).where(cb1.equal(RelatedElementsRoot.get("relationId"), pRelatedElement));
            TypedQuery<RelatedElements> qry = entityManager.createQuery(cq1);
            qry.setParameter(pRelatedElement, tSet);
            count = entityManager.createQuery(cq1).getSingleResult().getRelationId();
        }

pero ahora su trabajo…cualquier suggessions

segundo intento

CriteriaBuilder cb1=entityManager.getCriteriaBuilder();
        CriteriaQuery<Integer> cq1 = cb1.createQuery(Integer.class);
        Root<RelatedElements> RelatedElementsRoot=cq1.from(RelatedElements.class);
        for (Integer tSet : tempSet) {
            ParameterExpression<Integer> pRelatedElement=cb1.parameter(Integer.class);
            cq1.multiselect(cb1.count(cq1.from(RelatedElements.class)));
            cq1.where((cb1.equal(RelatedElementsRoot.get("relatedElementsPk").get("relationId"), pRelatedElement)));
            TypedQuery<Integer> qry = entityManager.createQuery(cq1);
            qry.setParameter(pRelatedElement, tSet);
            count =qry.getSingleResult();
        }

su excepción en la consulta.setParameter

No se puede localizar el constructor apropiado en clase [java.lang.Integer] [seleccione new java.lang.Entero(count(*)) de com.mcd.webex.modelo.RelatedElements como generatedAlias0, com.mcd.webex.modelo.RelatedElements como generatedAlias1 donde generatedAlias0.relatedElementsPk.relationId=:param0]

Podría usted mostrar su cq1 de datos de cadena?

OriginalEl autor Surya | 2013-10-04

3 Comentarios

  1. 2

    Como documentado, CriteriaBuilder.count devuelve Expression<java.lang.Long>. En consecuencia, el tipo de argumento para CriteriaQuery y TypedQuery debe ser Largo. Mismo es cierto para el tipo de count variable.

    Cuando sólo hay un valor para ser seleccionado, entonces tiene sentido el uso de CriteriaQuery.seleccione en lugar de multiselect, porque entonces este tipo de error es apresado ya en tiempo de compilación.

    Long count;
    ...
    CriteriaQuery<Long> cq1 = cb1.createQuery(Long.class);
    ...
    cq1.select(cb1.count(cq1.from(RelatedElements.class)));
    ...
    TypedQuery<Long> qry = entityManager.createQuery(cq1);
    

    OriginalEl autor Mikko Maunu

  2. 7
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<Long> cq = cb.createQuery(Long.class);
    Root<Dzialy> root = cq.from(Dzialy.class);
    EntityType <Dzialy> Dzialy_ = root.getModel();
    
    cq.select((cb.countDistinct(root)));
    cq.where( cb.equal( root.get(Dzialy_.getSingularAttribute("DZI_id")), 1) ); 
    
    long l = em.createQuery(cq).getSingleResult();
    

    em – EntityManager

    DZI_id – nombre de la columna

    1 – la búsqueda de valor

    Dzialy – clase de entidad

    OriginalEl autor milosz

  3. 0
    CriteriaBuilder qb = entityManager.getCriteriaBuilder();
    CriteriaQuery<Long> cq = qb.createQuery(Long.class);
    cq.select(qb.count(cq.from(YourEntity.class)));
    cq.where(/*your stuff*/);
    return entityManager.createQuery(cq).getSingleResult();
    
    Mientras este fragmento de código se puede resolver la cuestión, , incluyendo una explicación de realmente ayuda a mejorar la calidad de tu post. Recuerde que usted está respondiendo a la pregunta para los lectores en el futuro, y esas personas pueden no saber las razones de su sugerencia de código.

    OriginalEl autor CHowdappaM

Dejar respuesta

Please enter your comment!
Please enter your name here