开发者

Is there a way to update a database field based on a list?

开发者 https://www.devze.com 2023-03-10 19:12 出处:网络
Using JPA, I have a list of entries from m开发者_如何学Goy database : User(id, firstname, lastname, email)

Using JPA, I have a list of entries from m开发者_如何学Goy database :

User(id, firstname, lastname, email)

That I get by doing:

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

And I'd like to update all in one request, by doing something like this :

"UPDATE USER SET email = null IN :list"

and then set the parameter "list" to users

Is it possible? if so, how?

Thanks for your help :)


Well, you could embed the query that you used to obtain list in the where clause of the update.

UPDATE User a SET a.email = null 
WHERE user IN (SELECT b FROM User b WHERE lastName = :?)

By doing this you'd be doing the query to search the list and the update in single update query.

How do you like that? Do you think this could work?

-EDIT-

Since you want to use the original list of items instead of a list just retrieved from the database, you can still ensure you build the original list like this

UPDATE User a SET a.email = null 
WHERE user IN (SELECT b FROM User b WHERE lastName IN(:originalList))

Then when you invoke it, you can do something like this:

Collection<String> originalList = Arrays.asList("Kenobi", "Skywalker", "Windu");
query.setParameter("originalList", originalList);

By this, you can still ensure the query will only contain items in your original list and not any possible new item from the database, provided that that last name is a candidate key in the database, otherwise I would recommend that you use the ID for the subquery instend of the last name.


if you have jpa+hibernate you can use entityManager.createQuery() for creating hql query like that:

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

精彩评论

暂无评论...
验证码 换一张
取 消