diff --git a/src/org/redkale/source/EntityCache.java b/src/org/redkale/source/EntityCache.java index 1b2712f21..2ce09edcb 100644 --- a/src/org/redkale/source/EntityCache.java +++ b/src/org/redkale/source/EntityCache.java @@ -6,6 +6,7 @@ package org.redkale.source; import java.io.Serializable; +import java.lang.reflect.Array; import java.util.*; import java.util.concurrent.*; import java.util.function.*; @@ -43,7 +44,7 @@ public final class EntityCache { private final Attribute primary; private final Reproduce newReproduce; - + private final Reproduce chgReproduce; private volatile boolean fullloaded; @@ -66,9 +67,9 @@ public final class EntityCache { this.chgReproduce = Reproduce.create(type, type, (m) -> { try { java.lang.reflect.Field field = type.getDeclaredField(m); - if(field.getAnnotation(Transient.class) != null) return false; + if (field.getAnnotation(Transient.class) != null) return false; Column column = field.getAnnotation(Column.class); - if(column != null && !column.updatable()) return false; + if (column != null && !column.updatable()) return false; return true; } catch (Exception e) { return true; @@ -381,6 +382,17 @@ public final class EntityCache { return rs; } + public T[] update(final T value, final Collection> attrs, final FilterNode node) { + if (value == null || node == null) return null; + T[] rms = this.list.stream().filter(node.createPredicate(this)).toArray(len -> (T[]) Array.newInstance(type, len)); + for (T rs : rms) { + for (Attribute attr : attrs) { + attr.set(rs, attr.get(value)); + } + } + return rms; + } + public T update(final Serializable id, Attribute attr, final V fieldValue) { if (id == null) return null; T rs = this.map.get(id); @@ -437,7 +449,7 @@ public final class EntityCache { //------------------------------------------------------------------------------------------------------------------------------- protected Comparator createComparator(Flipper flipper) { - if (flipper == null || flipper.getSort() == null || flipper.getSort().isEmpty() || flipper.getSort().indexOf(';') >= 0 || flipper.getSort().indexOf('\n') >= 0) return null; + if (flipper == null || flipper.getSort() == null || flipper.getSort().isEmpty() || flipper.getSort().indexOf(';') >= 0 || flipper.getSort().indexOf('\n') >= 0) return null; final String sort = flipper.getSort(); Comparator comparator = this.sortComparators.get(sort); if (comparator != null) return comparator;