java - Jpa 对象中具有不同的参数

标签 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查询,我发送一个对象并通过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/

相关文章:

java - 在 Java 和数字类型中使用泛型

java - 使用 Unirest 和 Java 以及 Selenium WebDriver 解析 Json

java - 如何在 Java 中保留分隔符的同时在不同分隔符之间分割文本?

java - 如何在 JPA 中验证 Integer 为 null 或非空白?

java - 如何使用 Hibernate/JPA 2 实现 Spring Security 用户/权限?

java - Struts2 提交按钮方法调用不会触发

java - Java 8 b-124 的 javafx 中的嵌套列标题错误

java - 使用 JPA 映射双向一对多 Hibernate 实体

java - JPA 如何知道如何使用连接表链接列和实体?

java - 检索 JPA 实体列表和元数据