diff --git a/src/org/redkale/source/DataSource.java b/src/org/redkale/source/DataSource.java index fa797d4c6..817ae16bb 100644 --- a/src/org/redkale/source/DataSource.java +++ b/src/org/redkale/source/DataSource.java @@ -33,7 +33,7 @@ public interface DataSource { //----------------------insertAsync----------------------------- /** - * 新增记录, 多对象必须是同一个Entity类
+ * 新增记录, 多对象必须是同一个Entity类且必须在同一张表中
* * @param 泛型 * @param values Entity对象 @@ -41,7 +41,7 @@ public interface DataSource { public void insert(final T... values); /** - * 新增记录, 多对象必须是同一个Entity类
+ * 新增记录, 多对象必须是同一个Entity类且必须在同一张表中
* * @param 泛型 * @param values Entity对象 @@ -52,7 +52,7 @@ public interface DataSource { //-------------------------deleteAsync-------------------------- /** - * 删除指定主键值的记录, 多对象必须是同一个Entity类
+ * 删除指定主键值的记录, 多对象必须是同一个Entity类且必须在同一张表中
* 等价SQL: DELETE FROM {table} WHERE {primary} IN {values.id}
* * @param 泛型 @@ -63,7 +63,7 @@ public interface DataSource { public int delete(final T... values); /** - * 删除指定主键值的记录, 多对象必须是同一个Entity类
+ * 删除指定主键值的记录, 多对象必须是同一个Entity类且必须在同一张表中
* 等价SQL: DELETE FROM {table} WHERE {primary} IN {values.id}
* * @param 泛型 @@ -74,7 +74,7 @@ public interface DataSource { public CompletableFuture deleteAsync(final T... values); /** - * 删除指定主键值的记录
+ * 删除指定主键值的记录,多主键值必须在同一张表中
* 等价SQL: DELETE FROM {table} WHERE {primary} IN {ids}
* * @param Entity泛型 @@ -86,7 +86,7 @@ public interface DataSource { public int delete(final Class clazz, final Serializable... ids); /** - * 删除指定主键值的记录
+ * 删除指定主键值的记录,多主键值必须在同一张表中
* 等价SQL: DELETE FROM {table} WHERE {primary} IN {ids}
* * @param Entity泛型 @@ -151,7 +151,7 @@ public interface DataSource { //------------------------updateAsync--------------------------- /** - * 更新记录, 多对象必须是同一个Entity类
+ * 更新记录, 多对象必须是同一个Entity类且必须在同一张表中
* 等价SQL:
* UPDATE {table} SET column1 = value1, column2 = value2, ··· WHERE {primary} = {id1}
* UPDATE {table} SET column1 = value1, column2 = value2, ··· WHERE {primary} = {id2}
@@ -165,7 +165,7 @@ public interface DataSource { public int update(final T... values); /** - * 更新记录, 多对象必须是同一个Entity类
+ * 更新记录, 多对象必须是同一个Entity类且必须在同一张表中
* 等价SQL:
* UPDATE {table} SET column1 = value1, column2 = value2, ··· WHERE {primary} = {id1}
* UPDATE {table} SET column1 = value1, column2 = value2, ··· WHERE {primary} = {id2}
diff --git a/src/org/redkale/source/DataSqlSource.java b/src/org/redkale/source/DataSqlSource.java index e03024389..2a9cd5d46 100644 --- a/src/org/redkale/source/DataSqlSource.java +++ b/src/org/redkale/source/DataSqlSource.java @@ -434,6 +434,7 @@ public abstract class DataSqlSource extends AbstractService implement sql += FilterNode.formatToString(ids[i]); } sql += ")"; + if (info.isLoggable(logger, Level.FINEST)) logger.finest(info.getType().getSimpleName() + " delete sql=" + sql); return deleteDB(info, null, sql); } @@ -501,6 +502,33 @@ public abstract class DataSqlSource extends AbstractService implement } //---------------------------- update ---------------------------- + @Override + public int updateCache(Class clazz, T... values) { + if (values.length == 0) return 0; + final EntityInfo info = loadEntityInfo(clazz); + final EntityCache cache = info.getCache(); + if (cache == null) return -1; + int c = 0; + for (T value : values) { + c += cache.update(value); + } + return c; + } + + public int reloadCache(Class clazz, Serializable... ids) { + final EntityInfo info = loadEntityInfo(clazz); + final EntityCache cache = info.getCache(); + if (cache == null) return -1; + String column = info.getPrimary().field(); + int c = 0; + for (Serializable id : ids) { + Sheet sheet = querySheet(false, true, clazz, null, FLIPPER_ONE, FilterNode.create(column, id)).join(); + T value = sheet.isEmpty() ? null : sheet.list().get(0); + if (value != null) c += cache.update(value); + } + return c; + } + //------------------------- getNumberMap ------------------------- @Override public Map getNumberMap(final Class entityClass, final FilterFuncColumn... columns) {