我想知道jpa有可能为此做点什么。 我想要一个通用的方法:
SELECT P FROM personne p WHERE p.fistName = :fistName
SELECT P FROM personne p WHERE p.name = :name
SELECT P FROM personne p WHERE p.name = :name AND p.fistName = :fistName
SELECT P FROM personne p WHERE p.phone = :phone
它可能或我确实创建所有sql查询我发送一个对象dans jpa搜索相同的对象。 谢谢你。
答案 0 :(得分:1)
我不知道我是否理解正确,但您可以使用Criteria API以编程方式构建查询。然后,您可以使用通用方法来查询Person
的某个属性:
EntityManager em;
public List<Person> queryByPropertyValue(String propertyName, Object value) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Person> query = cb.createQuery(Person.class);
Root<Person> person = query.from(Person.class);
query.where(cb.equal(person.get(propertyName), value));
return em.createQuery(query).getResultList();
}
如果您想一次查询多个属性,可以像这样使用Map
:
public List<Person> queryByPropertyValues(Map<String, Object> properties) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Person> query = cb.createQuery(Person.class);
Root<Person> person = query.from(Person.class);
Predicate predicate = cb.and(); // == always true
for (Map.Entry<String, Object> property : properties.entrySet()) {
predicate = cb.and(predicate, cb.equal(person.get(property.getKey()), property.getValue()));
}
query.where(predicate);
return em.createQuery(query).getResultList();
}