将SQL语句'LIKE'转换为JPQL语句

时间:2011-08-03 05:49:38

标签: sql foreign-keys jpql

我想在eclipse JPQL查询中编写这个SQL语句。它适用于SQL,但我不确定如何在eclipse中编写它。

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

我在硬件表中的staffid是staff表的staffid主键的外键。所以硬件表中的人员是

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 个答案:

答案 0 :(得分:5)

like运算符仅适用于字符串。所以做这样的事情:

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

链接: