代码之家  ›  专栏  ›  技术社区  ›  Craig Otis

Hibernate query-LIKE子句,但用空格分隔查找前缀和通配符

  •  1
  • Craig Otis  · 技术社区  · 7 年前

    我有一个Hibernate查询,它有一个前缀要查找,如下所示:

    SELECT ... WHERE PRODUCT_ID LIKE ?
    

    这个 PRODUCT_ID 具有如下格式:

    ABC123 Brown Desk
    ABC1 Desk Set
    DE84 Bar Stool
    83UIK Spoon
    

    当前,准备好的语句值如下所示(假设 productId 作为参数传入):

    productId%
    

    这意味着对于查询的ID ABC1 ,它将返回 以上列表的结果:

    ABC123 Brown Desk
    ABC1 Desk Set
    

    我的问题: 如何在查找中包含空间,以便查询用于 具体的 产品,而不仅仅是前缀?

    我试过:

    'productId %'
    

    但它根本不会返回任何结果。如何告诉Hibernate我要查找 productId[SINGLE SPACE]% ?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Youcef LAIDANI    7 年前

    尝试使用 CONCAT 而不是 'productId %' '? %' :

    SELECT ... WHERE PRODUCT_ID LIKE CONCAT(?, ' %')
    //------------------------------------------^^
    

    或者你可以把 productId 在将其发送到查询之前,请在末尾使用空格:

    Query query = session.createQuery("SELECT ... WHERE PRODUCT_ID LIKE ?");
    query.setParameter(1, productId + " %");
    //---------------------------------^^