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) {