From 519bd52d049a6a2ab016416f2ee1add9c658980b Mon Sep 17 00:00:00 2001 From: xgc Date: Fri, 14 Jun 2024 19:18:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E4=BD=93=E7=B1=BB=E8=BD=AC=E6=8D=A2?= =?UTF-8?q?=E4=B8=BAMilvusEntity=E5=AF=B9=E8=B1=A1=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=88=B6=E7=B1=BB=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plus/converter/MilvusConverter.java | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/converter/MilvusConverter.java b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/converter/MilvusConverter.java index 3431eb2..0e4780e 100644 --- a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/converter/MilvusConverter.java +++ b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/converter/MilvusConverter.java @@ -75,9 +75,9 @@ public class MilvusConverter { List indexParams = new ArrayList<>(); // 用于存储属性与函数映射的缓存 PropertyCache propertyCache = new PropertyCache(); - + List fields = getAllFieldsFromClass(entityClass); // 遍历实体类的所有字段,读取@MilvusField注解信息 - for (Field field : entityClass.getDeclaredFields()) { + for (Field field : fields) { MilvusField fieldAnnotation = field.getAnnotation(MilvusField.class); if (Objects.isNull(fieldAnnotation)) { continue; @@ -131,7 +131,24 @@ public class MilvusConverter { return milvus; } - + /** + * 递归获取类及其所有父类的所有字段。 + * + * @param clazz 要检查的类。 + * @return 包含所有字段的列表。 + */ + public static List getAllFieldsFromClass(Class clazz) { + List fields = new ArrayList<>(); + // 递归地获取字段直到Object类 + while (clazz != null && clazz != Object.class) { + // 获取当前类的所有字段并添加到列表中 + fields.addAll(Stream.of(clazz.getDeclaredFields()) + .peek(field -> field.setAccessible(true)) // 确保可以访问私有字段 + .collect(Collectors.toList())); + clazz = clazz.getSuperclass(); // 移动到父类 + } + return fields; + } /** * 根据字段信息和字段名称创建索引参数对象。