我想知道 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查询,我发送一个对象并通过jpa搜索相同的对象。 谢谢你。
最佳答案
我不知道我是否理解正确,但你可以做的是使用 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();
}
关于java - Jpa 对象中具有不同的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34988641/