Преобразовать оператор SQL 'LIKE' в оператор JPQL - PullRequest
2 голосов
/ 03 августа 2011

Я хочу написать этот оператор SQL в JPQL-запросе eclipse. Он работает в SQL, но я не уверен, как написать его в Eclipse.

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

Мой идентификатор персонала в таблице оборудования является внешним ключом первичного ключа персонала таблицы персонала. Таким образом, персонал в аппаратной таблице

private Staff staff;

Вот что я пишу для поиска:

@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;
    }
}

Но это показывает

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

когда я запускаю поиск.

Может кто-нибудь помочь мне исправить?

1 Ответ

5 голосов
/ 03 августа 2011

Оператор like работает только со строкой. Так что сделайте что-то подобное:

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

Ссылка:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...