ClickHouse / ClickHouse/clickhouse-java
POJO serializer cannot handle nested custom objects with Nested types
- Lenguaje dominante
- Java
- Estrellas
- 1.6k
- Forks
- 636
- Merge medio
- 2 d 23 h
- PR fusionados (30 d)
- 29
Descripción
## Description
The POJO serializer cannot serialize nested custom objects when using ClickHouse `Nested` data types. It expects flattened List fields matching the flattened column names but doesn't traverse nested object graphs.
### Steps to reproduce
1. Create a POJO with a nested custom object field (e.g., `Address address`)
2. Define ClickHouse table with `Nested` type (e.g., `address Nested(street String, city String)`)
3. Attempt to insert POJO using client.insert()
See PR #2708 for complete working example.
### Error Log or Exception StackTrace
```
[main] INFO com.clickhouse.examples.client_v2.POJO2DbWriter - Table initialized. Registering class.
[main] WARN com.clickhouse.client.api.serde.POJOSerDe - No getter method found for column: addressstreet
[main] WARN com.clickhouse.client.api.serde.POJOSerDe - No setter method found for column: addressstreet
[main] WARN com.clickhouse.client.api.serde.POJOSerDe - No getter method found for column: addresscity
[main] WARN com.clickhouse.client.api.serde.POJOSerDe - No setter method found for column: addresscity
Exception in thread "main" java.lang.IllegalArgumentException: No serializer found for column 'address.street'. Did you forget to register it?
at com.clickhouse.client.api.Client.insert(Client.java:1238)
at com.clickhouse.examples.client_v2.POJO2DbWriter.flush(POJO2DbWriter.java:94)
at com.clickhouse.examples.client_v2.POJO2DbWriter.submit(POJO2DbWriter.java:89)
at com.clickhouse.examples.client_v2.Main.main(Main.java:59)
```
### Expected Behaviour
POJO serializer should traverse nested object graphs and call `getAddress().getStreet()` when encountering nested custom objects.
### Configuration
#### Environment
* Client version: main branch
* Language version: Java 17
* OS: macOS
#### ClickHouse Server
* ClickHouse Server version: latest (Docker image)
Guía de contribución
Línea de trabajo
Comienza con com.clickhouse.client.api.serde.POJOSerDe y reproduce el caso descrito en PR #2708, utilizando la ruta de inserción de POJO2DbWriter mostrada en el stack trace. Se considera hecho cuando un POJO que contiene un objeto Address puede insertarse en una columna Nested address sin errores por falta de getter o serializer.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- java
- Área
- databases
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 42/100