ClickHouse / ClickHouse/clickhouse-java

POJO serializer cannot handle nested custom objects with Nested types

Abierto
#2,709 1 comentario 0 reacciones 0 asignados Ver en GitHub
client-api-v2 feature-request
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

Abrir la 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

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.