【问题标题】:variable value in WHERE clause and wildcardWHERE 子句和通配符中的变量值
【发布时间】:2013-10-18 04:23:08
【问题描述】:

我搜索了两个小时,但找不到解决方案。我想做一个简单的查询,它应该检查字符串m_sName 是否包含String 变量。我尝试了很多东西,但找不到正确的语法。使用变量有效,使用通配符也有效,但两者一起不起作用。

TypedQuery<Kunde> query; 
query = em.createQuery("SELECT p FROM Kunde p" + 
    " WHERE p.m_sName LIKE :name", Kunde.class);
m_lKunde = query.setParameter("name", m_sSearch).getResultList();

这个查询确实有效,但我现在不知道如何使用通配符。我尝试了*,_,% 字符,但没有任何效果。

【问题讨论】:

  • 你可以试试:query = em.createQuery("SELECT p FROM Kunde p WHERE p.m_sName LIKE '%' || :name || '%'", Kunde.class);
  • JPQL 是否拥有 SQL 的连接运算符?我从没见过。

标签: java sql jpa jpa-2.0


【解决方案1】:

将通配符附加/前缀到您传入的令牌:

m_lKunde = query.setParameter("name", "%" + m_sSearch + "%").getResultList();

【讨论】:

  • @kai 很高兴我能帮上忙。如果这解决了您的问题,请接受。
【解决方案2】:

也许这会有所帮助

"SELECT p FROM Kunde p WHERE p.m_sName LIKE '%'|| :name || '%' ", Kunde.class);

【讨论】:

  • 异常说明:解析查询语法错误[SELECT p FROM Kunde p WHERE p.m_sName LIKE '%'|| :名称 || '%'],第 1 行,第 46 列:意外标记 [|]
  • 那是因为 JPQL 不允许你使用 SQL 的连接运算符。
猜你喜欢
  • 2012-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-19
  • 1970-01-01
  • 1970-01-01
  • 2013-03-19
  • 1970-01-01
相关资源
最近更新 更多