5

「name + surname」文字列をキーとして使用して、「customers」テーブルにクエリを実行したいと考えています。

名前と姓は異なるフィールドに保存されます。

したがって、私のクエリは次のようになります。

SELECT 
   * 
FROM 
   customers 
WHERE 
   CONCAT(name,' ',surname) LIKE '%term%' 
   OR CONCAT(surname,' ',name) LIKE '%term%' 

ただし、それはできません。私のクエリは JPA2基準クエリです。何かのようなもの:

CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
            CriteriaQuery cq = cb.createQuery();
            Root<Customer> from = cq.from(Customer.class);
            cq.select(from);

            Predicate whereClause = cb.or(
                cb.like(from.<String>get("name"), "%"+ r +"%"),
                cb.like(from.<String>get("surname"), "%"+ r +"%"),
            );

            cq.where(whereClause);      
            TypedQuery<Customer> query = getEntityManager().createQuery(cq);
            list = query.getResultList();

名前と姓の組み合わせで結果セットをフィルタリングするにはどうすればよいですか?

4

1 に答える 1

21

CriteriaBuilder.concat(Expression, Expression)を使用します。

Expression<String> exp1 = cb.concat(from.<String>get("name"), " ");
exp1 = cb.concat(exp1, from.<String>get("surname"));
Expression<String> exp2 = cb.concat(from.<String>get("surname"), " ");
exp2 = cb.concat(exp2, from.<String>get("name"));
Predicate whereClause = cb.or(cb.like(exp1, "%"+ r +"%"), cb.like(exp2, "%"+ r +"%"));
于 2013-03-19T16:01:51.163 に答える