有没有办法根据列表更新数据库字段?

时间:2011-06-07 12:52:44

标签: jpa playframework

使用JPA,我有一个来自我的数据库的条目列表:

User(id, firstname, lastname, email)

我这样做:

List<User> users = User.find("lastname = ?", "smith");

我希望通过执行以下操作来更新所有请求:

"UPDATE USER SET email = null IN :list"

然后将参数“list”设置为users

有可能吗?如果是这样,怎么样?

感谢您的帮助:)

2 个答案:

答案 0 :(得分:3)

好吧,您可以在更新的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用于输入姓氏。

答案 1 :(得分:0)

如果你有jpa + hibernate,你可以使用entityManager.createQuery()来创建hql查询 那样:

String hql = "UPDATE Supplier SET name = :newName WHERE name IN :name";
entityManager.createQuery(hql);