根据多个选择列表提供/不提供的值动态生成jpql查询

时间:2018-10-10 01:48:38

标签: jpa jpql

我的HTML页面上有四个选择列表,选择这些选项时我正在检索数据。如何基于选择列表中的选择动态创建jqpl查询。

在我的情况下,有4个选择列表,用户可以从所有列表中选择选项,也可以将它们组合。在这种情况下如何编写查询?

我的查询类似于

SELECT x FROM tablename x WHERE x.column1= :choice1 AND x.column2 = :choice2 AND x.column3 = :choice3 AND x.column4 = :choice4

2 个答案:

答案 0 :(得分:0)

我认为您可以尝试此Criteria API

答案 1 :(得分:0)

非常简单。您可以使用Map在每个条件中保存参数,以验证choiceX是否存在。

示例:

String jpql = "SELECT x FROM tablename x WHERE 1 = 1 ";

Map<String, Object> parameters = new HashMap<>();

if (choice1 != null) {
    jpql += "x.column1 = :choice1 ";
    parameters.put("choice1", choice1);
}

if (choice2 != null) {
    jpql += "x.column2 = :choice2 ";
    parameters.put("choice2", choice2);
}

Query query = entityManager.createQuery(jpql);

for (Entry<String, Object> entry : parameters.entrySet()) {
    query.setParameter(entry.getKey(), entry.getValue());
}

return query.getResultList();
相关问题