作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 JPA,我有一个来 self 的数据库的条目列表:
User(id, firstname, lastname, email)
我通过做得到:
List<User> users = User.find("lastname = ?", "smith");
我想在一个请求中更新所有内容,方法如下:
"UPDATE USER SET email = null IN :list"
然后将参数“list”设置为users
这可能吗?如果是,怎么办?
感谢您的帮助:)
最佳答案
那么,您可以将用于获取列表的查询嵌入到更新的 where 子句中。
UPDATE User a SET a.email = null
WHERE user IN (SELECT b FROM User b WHERE lastName = :?)
通过这样做,您将执行查询以搜索列表并在单个更新查询中进行更新。
你觉得怎么样?你认为这可行吗?
-编辑-
由于您想使用原始的项目列表而不是刚从数据库中检索到的列表,您仍然可以确保像这样构建原始列表
UPDATE User a SET a.email = null
WHERE user IN (SELECT b FROM User b WHERE lastName IN(:originalList))
然后当你调用它时,你可以做这样的事情:
Collection<String> originalList = Arrays.asList("Kenobi", "Skywalker", "Windu");
query.setParameter("originalList", originalList);
这样,您仍然可以确保查询只包含原始列表中的项目,而不包含数据库中任何可能的新项目,前提是姓氏是数据库中的候选键,否则我建议您使用子查询的 ID 代表姓氏。
关于jpa - 有没有办法根据列表更新数据库字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6265444/
我是一名优秀的程序员,十分优秀!