2013-12-12 64 views
1

我将使用LIKE表达式从数据库中获取数据。我的目的是根据我的前缀('Sam%')获取有限的数据。我试图执行下面的查询。但我有一个例外,如何为JPQL查询设置参数?

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(); 
    } 
} 

如何修复这个错误。

由于提前

+0

如果你想在jpql中使用'Like'操作比使用标准API更好。 –

回答

1

更新

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

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

中的setParameter使用%像下面

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

其中:def表现得像变量。所以你需要在值字符串中设置%字符串