[ 
https://issues.apache.org/jira/browse/IGNITE-23756?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andrey Novikov resolved IGNITE-23756.
-------------------------------------
      Reviewer: Andrey Novikov
    Resolution: Fixed

> Spring Data: Add support for type converters
> --------------------------------------------
>
>                 Key: IGNITE-23756
>                 URL: https://issues.apache.org/jira/browse/IGNITE-23756
>             Project: Ignite
>          Issue Type: Improvement
>            Reporter: Maksim Myskov
>            Assignee: Maksim Myskov
>            Priority: Major
>
> The current spring data extension has issues with working with LocalDateTime 
> type.
> LocalDateTime maps to Ignite's Timestamp, but it cannot be converted 
> automatically.
>  
> {code:java}
> java.lang.IllegalArgumentException: Can not set java.time.LocalDateTime field 
> Person.createdAt to java.sql.Timestamp {code}
> We need to get support for spring data converters 
> [https://docs.spring.io/spring-data/jpa/reference/data-commons/custom-conversions.html.]
>  
> Reproduce scenario:
> {code:java}
> package util;
> import java.time.LocalDateTime;
> import java.util.List;
> import org.apache.ignite.Ignite;
> import org.apache.ignite.IgniteCache;
> import org.apache.ignite.Ignition;
> import org.apache.ignite.cache.query.SqlFieldsQuery;
> import org.apache.ignite.cache.query.annotations.QuerySqlField;
> import org.apache.ignite.configuration.CacheConfiguration;
> import org.apache.ignite.configuration.IgniteConfiguration;
> public class LocalDateTimeChecker {    
>     // Person POJO with annotations
>     public static class Person {
>         @QuerySqlField(index = true)
>         private int id;        
>         @QuerySqlField
>         private String name;        
>         
>         @QuerySqlField
>         private LocalDateTime createdAt;       
>         public Person() {}        
>         public Person(int id, String name, LocalDateTime createdAt) {
>             this.id = id;
>             this.name = name;
>             this.createdAt = createdAt;
>         }
>         // Getters and setters
>         public int getId() { return id; }
>         public void setId(int id) { this.id = id; }
>         public String getName() { return name; }
>         public void setName(String name) { this.name = name; }
>         public LocalDateTime getCreatedAt() { return createdAt; }
>         public void setCreatedAt(LocalDateTime createdAt) { this.createdAt = 
> createdAt; }
>     }    
>         public static void main(String[] args) {
>         // Configure Ignite
>         IgniteConfiguration cfg = new IgniteConfiguration();        // 
> Configure cache
>         CacheConfiguration<Integer, Person> cacheCfg = new 
> CacheConfiguration<>("PersonCache");
>         cacheCfg.setIndexedTypes(Integer.class, Person.class);        
> cfg.setCacheConfiguration(cacheCfg);        // Start Ignite
>         try (Ignite ignite = Ignition.start(cfg)) {
>             // Get cache
>             IgniteCache<Integer, Person> cache = 
> ignite.getOrCreateCache(cacheCfg);            // Insert data
>             LocalDateTime now = LocalDateTime.now();
>             cache.put(1, new Person(1, "John Doe", now));
>             cache.put(2, new Person(2, "Jane Smith", now.plusDays(1)));       
>      // Query using custom function
>             SqlFieldsQuery query = new SqlFieldsQuery(
>                 "SELECT id, name, asLocalDateTime(createdAt) FROM Person"
>             );            // Execute query and print results with types
>             List<List<?>> results = cache.query(query).getAll();
>             for (List<?> row : results) {
>                 System.out.println("Row data:");
>                 for (Object field : row) {
>                     System.out.println("Value: " + field +
>                         ", Type: " + (field != null ? 
> field.getClass().getName() : "null"));
>                 }
>                 System.out.println("---");
>             }
>         }
>     }
> } {code}
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to