当前位置: 首页 > 面试题库 >

JPA where子句any

邓焱
2023-03-14
问题内容

在JPA中,查询为:

Query q = entityManager.createQuery("select o from Product o WHERE o.category = :value");
q.setParameter("category", category);

如何在JPA中将类别设置为任何类别?因此,如果传递了null类别,我将简单地忽略category参数,选择所有产品。


问题答案:

如何在JPA中将类别设置为任何类别?因此,如果传递了null类别,我将简单地忽略category参数,选择所有产品。

您必须在此处动态构建查询。使用HQL(这是一个简化的示例):

Map<String, Object> params = new HashMap<String, Object>();
StringBuffer hql = new StringBuffer("from Product p");
boolean first = true;

if (category != null) {
    hql.append(first ? " where " : " and ");
    hql.append("p.category = :category");
    params.put("category", category);
}

// And so on...

Query query = session.createQuery(hql.toString());

Iterator<String> iter = params.keySet().iterator();
while (iter.hasNext()) {
    String name = iter.next();
    Object value = params.get(name);
    query.setParameter(name, value);
}

List results = query.list()

但是,实际上,我的建议是在此处使用Criteria API:

Criteria criteria = session.createCriteria(Product.class);
if (category != null) {
    criteria.add(Expression.eq("category", category);
}
// And so on...
List results = criteria.list();

复杂的动态查询要简单得多。



 类似资料:
  • 问题内容: 有什么区别,每个应该有什么区别? 如果我正确理解该理论,则查询优化器应该可以互换使用。 问题答案: 它们不是同一件事。 考虑以下查询: 和 第一个将返回订单及其订单号的行(如果有)。第二个将返回所有订单,但只有订单将具有与之关联的任何行。 使用,子句 实际上是 等效的。但是,仅仅因为它们在功能上相同而产生相同的结果,并不意味着这两种子句具有相同的语义。

  • 主要内容:1. GROUP BY,2. HAVING子句,3.ORDER BY子句以下是一些觉的SQL子句: 1. GROUP BY SQL 语句用于将相同的数据排列到分组中。 语句与SQL SELECT语句一起使用。 语句在语句中跟随子句,并在句之前。 语句与聚合函数一起使用。 语法 假设有一个表:PRODUCT_MAST ,它的结构和数据记录如下所示 - PRODUCT COMPANY QTY RATE COST Item1 Com1 2 10 20 Item2 Com2

  • 问题内容: 请参见以下SQL语句: 如果添加以下内容: 会简单地排除Date_Diff <= 365的行吗? HAVING子句在这里应有什么作用? 编辑:我没有遇到这里所说的答案。mdb的副本位于http://hotfile.com/dl/40641614/2353dfc/test.mdb.html(无宏或病毒)。VISDATA.EXE用于执行查询。 EDIT2:我认为问题可能出在VISDATA,

  • 本章提供了有关如何使用JDBC应用程序从表中选择记录的示例。 这将在从表中选择记录时使用LIKE子句添加其他条件。 在执行以下示例之前,请确保您具备以下示例 - 要执行以下示例,您可以使用实际用户名和密码替换用户名和密码。 您的MySQL或您正在使用的任何数据库已启动并正在运行。 所需的步骤 (Required Steps) 使用JDBC应用程序创建新数据库需要以下步骤 - Import the

  • 本章提供了有关如何使用JDBC应用程序从表中选择记录的示例。 这将在从表中选择记录时使用WHERE子句添加其他条件。 在执行以下示例之前,请确保您具备以下示例 - 要执行以下示例,您可以使用实际用户名和密码替换用户名和密码。 您的MySQL或您正在使用的任何数据库已启动并正在运行。 所需的步骤 (Required Steps) 使用JDBC应用程序创建新数据库需要以下步骤 - Import the

  • 我可以通过两种方式来实现这一点,使用where子句或join查询,在spark SQL中哪个更快?为什么?Where子句比较列添加、选择那些记录还是在列本身上联接,哪个更好?