Thi*_*ues 4 java jpa jpql criteria-api
我有这样的事情:
@Entity
public class Person {
@ElementCollection
private List<String> emails;
...
}
Run Code Online (Sandbox Code Playgroud)
如何将以下 JPQL 转换为条件查询:
select p from Person p
where exists (
select 1
from p.emails e
where e like :email
)
Run Code Online (Sandbox Code Playgroud)
小智 9
If you don't really need the power of LIKE and an exact match is enough you can check if emails contains email.
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<Person> criteria = builder.createQuery(Person.class);
Root<Person> p = criteria.from(Person.class);
criteria.select(p);
Expression<List<String>> emails = p.get(Person_.emails);
criteria.where(builder.isMember("[email address]", emails));
TypedQuery<Person> tq = entityManager.createQuery(criteria);
List<Person> persons = tq.getResultList();
Run Code Online (Sandbox Code Playgroud)
请注意,这p.get(Person_.emails)需要类的静态元模型Person。如果你没有那个,你可以以p.get("emails")类型安全为代价替换那个部分。
如果您确实需要执行LIKE,则必须加入集合。
Join<Person, String> emailJoin = p.join(Person_.emails);
criteria.where(builder.like(emailJoin, "[email address]"));
criteria.distinct(true);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2986 次 |
| 最近记录: |