Ну, вы можете встроить запрос, который вы использовали для получения списка, в предложение where обновления.
UPDATE User a SET a.email = null
WHERE user IN (SELECT b FROM User b WHERE lastName = :?)
Поступая таким образом, вы выполняете запрос для поиска в списке и обновлении.в одном запросе на обновление.
Как вам это нравится?Как вы думаете, это может работать?
-EDIT-
Поскольку вы хотите использовать оригинальный список элементов вместо списка, только что извлеченного из базы данных, вы можетепо-прежнему убедитесь, что вы строите исходный список следующим образом:
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);
Таким образом, вы все равно можете убедиться, чтосодержат только элементы в исходном списке, а не любые возможные новые элементы из базы данных, при условии, что эта фамилия является ключом-кандидатом в базе данных, в противном случае я бы порекомендовал использовать идентификатор для подзапроса вместо фамилии.