Jpa在对象中有一个不同的参数

时间:2016-01-25 09:05:56

标签: java jpa

我想知道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搜索相同的对象。 谢谢你。

1 个答案:

答案 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();
}