假设我有一个网站,用户可以在该网站上选择多种参数。
我可以用SQL编写所需的内容,但问题是可能会有很多OR(很多多值参数):
SELECT * FROM vacancy JOIN types t on vacancy.id = t.id
WHERE (company ='Luxoft' OR company LIKE '%SoftServe%' OR...)
AND (location LIKE 'Kiev' OR location LIKE 'Lviv' OR..)
AND (type like 'Java' OR type like 'JavaScript' OR..)
现在,我正在通过从数据库中获取所有职位空缺,对所有职位进行迭代,保存包含所需TITLE的职位,然后从这些新保存的职位中进行迭代,并找到具有所需公司之一的职位参数,位置参数是类型参数。
但是因为现在我有了@ElementCollection
和@CollectionTable
映射到空缺数据库的多类型空缺,所以类型的获取变得非常缓慢。
我想到了Spring ExampleMatcher,但不确定它能做到这一点。
谢谢。
答案 0 :(得分:2)
CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
CriteriaQuery<EntityName> c = cb.createQuery(EntityName.class);
Root<EntityName> root = c.from(EntityName.class);
Predicate company = cb.or (
cb.equal(root.<String>get("company"), "Luxoft"),
cb.like(root.<String>get("name"), "%SoftServe%"));
Predicate location = cb.or (
cb.equal(root.<String>get("location"), "Kiev"),
cb.like(root.<String>get("location"), "%Lviv%"));
Expression<String> typeExpression = root.get("type");
Predicate type = typeExpression.in("Java", "Javascript");
c.where(company, location, type);
return c.getResultList();
Hibernate的 CriteriaBuilder
和CriteriaQuery
类将帮助您使用代码创建此类查询。