当前位置: 首页 > 知识库问答 >
问题:

QueryDSL:使用两个列表参数更新表

长孙泉
2023-03-14

我有一个更新所有员工的方法,在服务层为每个单个员工调用该方法。

public void updateEmployeeData(Long id, String account) {
        queryFactory.update(employee)
                .set(employee.employeeAccount, account)
                .where(employee.employeeId.eq(id))
                .execute();
    }

我必须优化代码,并用列表参数调用它一次。出于这个原因,我将id参数转换为list。

public void updateEmployeeData(List<Long> ids, String account) {
        queryFactory.update(employee)
                .set(employee.employeeAccount, account)
                .where(employee.employeeId.in(ids))
                .execute();
    }

除了增强For循环和在每个员工上迭代之外,还有什么解决方案吗?

共有1个答案

彭飞虎
2023-03-14

在SQL中,您可以使用临时表或values子句,但不幸的是,这些在JPQL中是不可用的。在JPA修改查询中,不可能更新具有不同值的多行。另外,Querydsl不支持这一点,因为它只是一个围绕JPQL的查询构建器。

 类似资料:
  • 问题内容: 我正在尝试使用表B中的数据更新表A。我认为我可以执行以下操作: 但是a,这行不通。 有人知道我该怎么做吗? 问题答案: 您的查询不起作用,因为您没有 FROM 子句来指定要通过A / B别名的表。 请尝试使用以下内容: 就我个人而言,我更喜欢使用更明确的联接语法以保持清晰,即

  • 下面的代码分别调用两个简单的函数100亿次。 我的假设是这两个调用的性能几乎相同。如果有的话,我会猜到传递两个参数会比传递一个稍微慢一些。鉴于所有参数都是对象引用,我并不期望其中一个参数是列表这一事实会产生任何差异。 我运行了多次测试,一个典型的结果是“12781/30536”。换句话说,使用两个字符串的调用需要13秒,使用列表的调用需要30秒。 更新 这不是一个公平的测试,原因很多。然而,它确实

  • 我有2个具有1:(0或1)关系的表,例如: 表1-学生 表2-学生地址 并非每个学生都有地址(例如) 我想更新这两个表,更新学生,如果存在相对行student_address-更新也student_address。

  • 问题内容: 我有两个表需要相同的值以实现非规范化。 这是查询。 第一张桌子 第二张桌子 如您所见,两个表之间的唯一区别是它们的名称和两个表没有该字段 无论如何将两个更新合并为一个? 问题答案: 如文档中所述,应该可以进行多表更新。 http://dev.mysql.com/doc/refman/5.5/en/update.html 注意:多表不支持LIMIT,因此根据具体情况,这可能会引起更多麻烦

  • 问题内容: 我有和桌子。 询问: 返回474条记录 对于这些记录,我想添加的表成的表。 示例 :如果对于第一条记录,客户的id是9 ,地址的也是9,那么我想在地址表的cid列中插入9。 我试过了: 但这似乎不起作用。 问题答案: 这是Postgres UPDATE JOIN格式: 这是其他变体:http : //mssql-to- postgresql.blogspot.com/2007/12/u

  • 我正在尝试将所有MySQL连接从旧的MySQL_查询切换到PDO。我试图使用不同的数组更新MySQL表的多个行和列,收到以下错误: [42000]:语法错误或访问冲突:1064您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以获取正确的语法,以便在第1行中使用接近(accnt、car、radio、misc)值('admin'、'300.00'、'400.00'、'10.00'),其中