ClickHouse / ClickHouse/clickhouse-java
POJO serializer cannot handle nested custom objects with Nested types
- Ngôn ngữ chính
- Java
- Star
- 1.6k
- Fork
- 636
- Merge trung bình
- 2 ngày 23 giờ
- Pull request đã merge (30 ngày)
- 29
Mô tả
## 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)
Hướng dẫn đóng góp
Hướng nghiên cứu
Bắt đầu với com.clickhouse.client.api.serde.POJOSerDe và tái hiện trường hợp được mô tả trong PR #2708, sử dụng đường dẫn chèn của POJO2DbWriter được hiển thị trong stack trace. Hoàn thành khi một POJO chứa đối tượng Address có thể được chèn vào cột Nested address mà không có lỗi do thiếu getter hoặc serializer.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- java
- Lĩnh vực
- databases
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 42/100