Like句を使用してJPQLクエリを記述しようとしています。
LIKE '%:code%'
Code = 4を見つけて見つけたい
455 554 646 ...
:code = '%value%'
を渡すことができません
namedQuery.setParameter("%" + this.value + "%");
別の場所では、:value
文字でラップされていない%
が必要だからです。何か助け?
もしあなたがそうするなら
LIKE :code
してから
namedQuery.setParameter("code", "%" + this.value + "%");
その場合、値には「%」記号がありません。同じクエリ内の別の場所で使用する必要がある場合は、単に 'code'以外の別のパラメーター名を使用します。
すべてのクエリに名前付きパラメーターを使用しているわけではありません。たとえば、 JpaRepository で名前付きパラメーターを使用することはまれです。
回避策として、JPQL[〜#〜] concat [〜#〜]関数(このコードはstart with):
@Repository
public interface BranchRepository extends JpaRepository<Branch, String> {
private static final String QUERY = "select b from Branch b"
+ " left join b.filial f"
+ " where f.id = ?1 and b.id like CONCAT(?2, '%')";
@Query(QUERY)
List<Branch> findByFilialAndBranchLike(String filialId, String branchCode);
}
私はこのテクニックを優れたドキュメントで見つけました: http://openjpa.Apache.org/builds/1.0.1/Apache-openjpa-1.0.1/docs/manual/jpa_overview_query.html
JPA LOCATE関数 を使用できます。
LOCATE(検索文字列、候補文字列[、startIndex]):候補文字列の検索文字列の最初のインデックスを返します。ポジションは1から始まります。文字列が見つからない場合、0を返します。
参考: my top google hit のドキュメントでは、パラメーターが逆になっています。
SELECT
e
FROM
entity e
WHERE
(0 < LOCATE(:searchStr, e.property))
私が遅れているか範囲外であるかはわかりませんが、私の意見では次のようにできます:
String orgName = "anyParamValue";
Query q = em.createQuery("Select O from Organization O where O.orgName LIKE '%:orgName%'");
q.setParameter("orgName", orgName);
JPA基準APIにはNice like()メソッドがあります。それを使用してみてください、それが役立つことを願っています。
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery criteriaQuery = cb.createQuery(Employees.class);
Root<Employees> rootOfQuery = criteriaQuery.from(Employees.class);
criteriaQuery.select(rootOfQuery).where(cb.like(rootOfQuery.get("firstName"), "H%"));
単に省きます ''
LIKE %:code%
i.address LIKE CONCAT( '%' ,: address、 '%') ");インストラクターiからiを選択します。
同じために以下の基準コードを使用します。
@Test public void findAllHavingAddressLike(){CriteriaBuilder cb = criteriaUtils.criteriaBuilder(); CriteriaQuery cq = cb.createQuery(Instructor.class);ルートルート= cq.from(Instructor.class); printResultList(cq.select(root).where(cb.like(root.get(Instructor_.address)、 "%#1074%"))); }