如何在Hibernate Java中使用Ilike和%在CreateSqlquery中



我已经进行了一个SQL查询,现在我需要从中添加搜索。它需要从userfullname搜索给定的关键字查询在PostgreSQL中工作,但它不使用createsqlquery。

sqlQuery = "select * from ( " + sqlQuery + ") a where a.payeeName ilike :searchpayeename ";
SQLQuery query = sessionFactory.getCurrentSession().createSQLQuery(sqlQuery)
                .addScalar("id", new LongType());
 query.setParameter("searchpayeename", "%"+payee + "%");

当我在SQL中运行相同的查询时,它不会给我结果。任何想法。

运算符iLike iLike不适用于JPQL,仅与本机查询。

如果您想使用jpql,则需要在查询两边使用 toLowerCase() 模拟ILIKE函数。

jpqlQuery = "SELECT a FROM EntityName a WHERE LOWER(a.payeeName) LIKE :searchpayeename";
SQLQuery query = sessionFactory.getCurrentSession().createSQLQuery(jpqlQuery)
                .addScalar("id", new LongType());
query.setParameter("searchpayeename", "%" + payee.toLowerCase() + "%");

或使用createNativeQuery:

sqlQuery = "SELECT * FROM EntityName a WHERE " +
           "LOWER(a.payeeName) LIKE LOWER(CONCAT('%',:searchpayeename, '%'))";
SQLQuery query = sessionFactory.getCurrentSession().createNativeQuery(sqlQuery)
                .addScalar("id", new LongType());
query.setParameter("searchpayeename", "%" + payee.toLowerCase() + "%");

最新更新