Java 如何为类似JPQL的查询设置参数?

Java 如何为类似JPQL的查询设置参数?,java,jpql,Java,Jpql,我将使用LIKE表达式从数据库中获取数据。我的目的是根据我的前缀(“Sam%”获取有限的数据。我尝试执行如下查询。但我有个例外 java.lang.IllegalArgumentException: You have attempted to set a parameter value using a name of def that does not exist in the query string select o from Item o WHERE o.itemName like ':d

我将使用LIKE表达式从数据库中获取数据。我的目的是根据我的前缀(“Sam%”获取有限的数据。我尝试执行如下查询。但我有个例外

java.lang.IllegalArgumentException: You have attempted to set a parameter value using a name of def that does not exist in the query string select o from Item o WHERE o.itemName like ':def%'.
我的方法是,

public List<Item> getSuggestedData(String def) {
    EntityManager em = getEntityManager();
    try {
        Query q = em.createQuery("select o from Item o WHERE o.itemName like ':def%'");
        q.setParameter("def", def);
        return q.getResultList();
    } finally {
        em.close();
    }
}
公共列表getSuggestedData(字符串定义){
EntityManager em=getEntityManager();
试一试{
Query q=em.createQuery(“从o项中选择o,其中o.itemName类似于:def%”);
q、 设置参数(“def”,def);
返回q.getResultList();
}最后{
em.close();
}
}
如何修复此错误

提前感谢

更新

Query q = em.createQuery("select o from Item o WHERE o.itemName like ':def%'");


在setParameter中使用
%
,如下所示

Query q = em.createQuery("select o from Item o WHERE o.itemName like ':def'");
q.setParameter("def", "" + def + "%");

其中
:def
的行为类似于变量。因此,如果希望在jpql中使用类似于操作的操作,而不是更好地使用CriteriaAPI,则需要在值字符串中设置
%
Query q = em.createQuery("select o from Item o WHERE o.itemName like ':def'");
q.setParameter("def", "" + def + "%");