2 votes

Convertir l'instruction SQL 'LIKE' en instruction JPQL

Je veux écrire cette instruction SQL dans une requête JPQL d'Eclipse. Cela fonctionne en SQL mais je ne suis pas sûr de savoir comment l'écrire dans eclipse.

SELECT * 
FROM hardware h
WHERE h.`Staffid` LIKE '%150%'

Mon staffid dans la table hardware est une clé étrangère à la clé primaire staffid de la table staff. Donc le personnel dans la table hardware est

private Staff staff;

C'est ce que j'écris pour lancer ma recherche :

@SuppressWarnings("unchecked")
public List<Hardware> searchstaff(Staff a) {
    try {
        entityManager.getTransaction().begin();             

        Query query = entityManager
            .createQuery("SELECT st from Hardware st where st.staff LIKE :x");
        query.setParameter("x", a);

        List<Hardware> list = query.getResultList(); 
        entityManager.getTransaction().commit();         
        return list;                     
    } catch (Exception e) {
        return null;
    }
}

Mais cela montre

javax.servlet.ServletException: java.lang.IllegalStateException: 
Exception Description: Transaction is currently active 

quand je lance la recherche.

Quelqu'un peut-il m'aider à corriger ?

5voto

Cyril Gandon Points 8930

L'opérateur like ne fonctionne qu'avec des chaînes de caractères. Faites donc quelque chose comme ça :

Query query = entityManager
    .createQuery("SELECT st from Hardware st where st.staff.id LIKE :x");
query.setParameter("x", '%' + a.getId() + '%');

Lien :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X