2016-07-20 31 views
0

ich bin neu hier, ich habe ein Problem, ein Verfahren writting, wo ich versuchte, einen Ausdruck mit Kriterien JPA und Spring zu nennen, habe ich den nächsten Code:Wie analysieren Sie einen Typ String in JPA mit dem Ausdruck LIKE?

@Override 
    public List<ContractOrder> getOrdersByIn(List<String> paramsIn) { 
     CriteriaBuilder builder = entityManager.getCriteriaBuilder(); 
     CriteriaQuery<ContractOrder> query = builder.createQuery(ContractOrder.class); 

     Root<ContractOrder> root = query.from(ContractOrder.class); 

     Expression<String> exp = root.get("**order_id**"); 
     Predicate predicateIn = exp.**in**(paramsIn); 

     ParameterExpression<Long> pexp = builder.parameter(Long.class,"order_id"); 
     Predicate predicateLike = builder.like(exp, pexp); 

     query.where(builder.or(predicateIn,predicateLike)); 

     TypedQuery<ContractOrder> queryT = entityManager.createQuery(query.select(root)); 

     queryT.setParameter(0, Long.valueOf("%5")); 

     List<ContractOrder> lista = queryT.getResultList(); 

     return lista; 
    } 

Wo „order_id“ ist Mapping als Typ lang und ich möchte einen Parameter wie diesen übergeben "% 5".

Können Sie mir dabei helfen?

Grüße !!

Antwort

0

Warum dies %5 ??? Es ist eine Variable ???????

queryT.setParameter(0, Long.valueOf(5)); 

oder

queryT.setParameter(0, Long.valueOf("5")); 

sollte in Ordnung sein.

Warum ** und nicht nur *? Ich verstehe nicht ...

Predicate predicateIn = exp.**in**(paramsIn); 

Ist es zu kompilieren ?????

+0

Editor setzt ** in diese Zeile. Das ist das richtige: * Prädikat predicateIn = exp.in (paramsIn) * ... Ich lerne immer noch JPA-Kriterien und ich weiß nicht, wie die API wissen kann, wo das '%' ist. Ich möchte diese Abfrage in Kriterien konvertieren ... * WHERE order_id wie '% 5' *, aber in der Tabelle "order_id" ist eine Typnummer und meine Entität ist ein Typ lang :( –

+0

Was ist Ihre DB? Und Ihre Nummer Typ hat eine Genauigkeit in Ihrer DB? – davidxxx