1818package org .apache .fluss .client .converter ;
1919
2020import javax .annotation .Nullable ;
21+
2122import java .lang .reflect .Constructor ;
2223import java .lang .reflect .Field ;
2324import java .lang .reflect .Method ;
2930import java .util .Map ;
3031import java .util .Objects ;
3132
32- import static org .apache .fluss .utils .Preconditions .checkArgument ;
33-
3433/**
3534 * Internal representation of a POJO type, used to validate POJO requirements and to provide unified
3635 * accessors for reading/writing properties.
@@ -74,53 +73,39 @@ static <T> PojoType<T> of(Class<T> pojoClass) {
7473
7574 Map <String , Property > props = new LinkedHashMap <>();
7675 for (Map .Entry <String , Field > e : allFields .entrySet ()) {
77- String fieldName = e .getKey ();
76+ String name = e .getKey ();
7877 Field field = e .getValue ();
7978 // Enforce nullable fields: primitives are not allowed in POJO definitions.
8079 if (field .getType ().isPrimitive ()) {
8180 throw new IllegalArgumentException (
8281 String .format (
8382 "POJO class %s has primitive field '%s' of type %s. Primitive types are not allowed; all fields must be nullable (use wrapper types)." ,
84- pojoClass .getName (), fieldName , field .getType ().getName ()));
83+ pojoClass .getName (), name , field .getType ().getName ()));
8584 }
86- // Check for @ColumnName annotation to determine the mapped column name
87- ColumnName columnNameAnnotation = field .getAnnotation (ColumnName .class );
88- String mappedColumnName =
89- columnNameAnnotation != null ? columnNameAnnotation .value () : fieldName ;
90- checkArgument (
91- !mappedColumnName .isEmpty (),
92- "Column name cannot be empty for field '%s' in POJO class %s" ,
93- fieldName ,
94- pojoClass .getName ());
95-
9685 // use boxed type as effective type
9786 Class <?> effectiveType = boxIfPrimitive (field .getType ());
9887 boolean publicField = Modifier .isPublic (field .getModifiers ());
99- Method getter = getters .get (fieldName );
100- Method setter = setters .get (fieldName );
88+ Method getter = getters .get (name );
89+ Method setter = setters .get (name );
10190 if (!publicField ) {
10291 // When not a public field, require both getter and setter
10392 if (getter == null || setter == null ) {
104- final String capitalizedName = capitalize (fieldName );
93+ final String capitalizedName = capitalize (name );
10594 throw new IllegalArgumentException (
10695 String .format (
10796 "POJO class %s field '%s' must be public or have both getter and setter (get%s/set%s)." ,
108- pojoClass .getName (),
109- fieldName ,
110- capitalizedName ,
111- capitalizedName ));
97+ pojoClass .getName (), name , capitalizedName , capitalizedName ));
11298 }
11399 }
114100 props .put (
115- mappedColumnName ,
101+ name ,
116102 new Property (
117- fieldName ,
103+ name ,
118104 effectiveType ,
119105 field .getGenericType (),
120106 publicField ? field : null ,
121107 getter ,
122- setter ,
123- mappedColumnName ));
108+ setter ));
124109 }
125110
126111 return new PojoType <>(pojoClass , ctor , props );
@@ -284,19 +269,11 @@ private static Class<?> boxIfPrimitive(Class<?> type) {
284269 }
285270
286271 static final class Property {
287- /** The name of the field in the POJO class (e.g. "userId"). */
288272 final String name ;
289-
290273 final Class <?> type ;
291274 /** The generic type of the field (e.g. {@code Map<String, AddressPojo>}). */
292275 final Type genericType ;
293276
294- /**
295- * The name of the column in the Fluss table. This may differ from 'name' if a @ColumnName
296- * annotation is present. Used for looking up the property by table column name.
297- */
298- final String mappedName ;
299-
300277 @ Nullable final Field publicField ;
301278 @ Nullable final Method getter ;
302279 @ Nullable final Method setter ;
@@ -307,12 +284,10 @@ static final class Property {
307284 Type genericType ,
308285 @ Nullable Field publicField ,
309286 @ Nullable Method getter ,
310- @ Nullable Method setter ,
311- String mappedName ) {
287+ @ Nullable Method setter ) {
312288 this .name = Objects .requireNonNull (name , "name" );
313289 this .type = Objects .requireNonNull (type , "type" );
314290 this .genericType = Objects .requireNonNull (genericType , "genericType" );
315- this .mappedName = Objects .requireNonNull (mappedName , "mappedName" );
316291 this .publicField = publicField ;
317292 this .getter = getter ;
318293 this .setter = setter ;
0 commit comments