Correctly fill multiple named parameters with collection

Fixes https://github.com/spring-projects/spring-framework/issues/34768

Signed-off-by: Yubao Liu <yubao.liu@gmail.com>
This commit is contained in:
Yubao Liu 2025-04-17 00:44:02 +08:00
parent 39e263fe5d
commit 1c4c34c164
No known key found for this signature in database
1 changed files with 16 additions and 8 deletions

View File

@ -528,17 +528,25 @@ abstract class NamedParameterUtils {
if (parameter.getValue() instanceof Collection collection) { if (parameter.getValue() instanceof Collection collection) {
Iterator<Object> iterator = collection.iterator(); Iterator<Object> iterator = collection.iterator();
Iterator<BindMarker> markers = bindMarkers.iterator(); Iterator<BindMarker> markers = bindMarkers.iterator();
while (iterator.hasNext()) { do {
Object valueToBind = iterator.next(); while (iterator.hasNext()) {
if (valueToBind instanceof Object[] objects) { Object valueToBind = iterator.next();
for (Object object : objects) { if (valueToBind instanceof Object[] objects) {
bind(target, markers, object); for (Object object : objects) {
bind(target, markers, object);
}
}
else {
bind(target, markers, valueToBind);
} }
} }
else {
bind(target, markers, valueToBind); if (markers.hasNext()) {
iterator = collection.iterator();
} else {
break;
} }
} } while (true);
} }
else { else {
for (BindMarker bindMarker : bindMarkers) { for (BindMarker bindMarker : bindMarkers) {