3

I try to implement ignite 2.6.0 with spring boot 2.1.0.RELEASE, but when i clean install the code i get the following exception:

name clash: deleteAll(java.lang.Iterable<ID>) in org.apache.ignite.springdata.repository.IgniteRepository and deleteAll(java.lang.Iterable<? extends T>) in org.springframework.data.repository.CrudRepository have the same erasure, yet neither overrides the other

It's about a maven projet and here is the dependencies:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.ignite</groupId>
        <artifactId>ignite-core</artifactId>
        <version>2.6.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.ignite</groupId>
        <artifactId>ignite-slf4j</artifactId>
        <version>2.6.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.ignite</groupId>
        <artifactId>ignite-spring-data</artifactId>
        <version>2.6.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.ignite</groupId>
        <artifactId>ignite-spring</artifactId>
        <version>2.6.0</version>
        <exclusions>
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
    </dependency>
</dependencies>

Ignite config class

@Configuration
@EnableIgniteRepositories
public class IgniteConfig {
@Bean
public Ignite igniteInstance() {
  IgniteConfiguration config = new IgniteConfiguration();

  CacheConfiguration<String, MyEntity> cacheMyEntity = new CacheConfiguration<>("MyEntityCach");
  cacheMyEntity.setIndexedTypes(String.class, MyEntity.class);

  CacheConfiguration[] cacheConfiguration= new CacheConfiguration[] {cacheMyEntity};
  config.setCacheConfiguration(cacheConfiguration);
  return Ignition.start(config);
}
}

Repository

@RepositoryConfig(cacheName = "MyEntityCach")
public interface EntityRepository extends IgniteRepository<MyEntity, String>{}

Entity

@Getter
@Setter
@Builder
public class MyEntity implements Serializable{

@QuerySqlField(index = true)
private String id;

@QuerySqlField()
private String label;

@QuerySqlField()
private Long number;

@QuerySqlField(index = true)
private Long idParent
}

Well, i dont use any methode to delete so why it gives me this exception ! Is that a conflict of versions some where ? Have you any idea ?

Abder KRIMA
  • 3,418
  • 5
  • 31
  • 54

2 Answers2

7

You need to use ignite-spring-data_2.0 instead of ignite-spring-data:

    <dependency>
        <groupId>org.apache.ignite</groupId>
        <artifactId>ignite-spring-data_2.0</artifactId>
        <version>${ignite.version}</version>
    </dependency>

This works for spring-boot 2.1.6.RELEASE and ignite 2.7.5

Bruce Stewart
  • 91
  • 1
  • 4
1

I also try to same thing Ignite 2.6 and Spring Boot 2.1.0 and the IgniteReposities don't work either. I'm pretty sure that Ignite Spring Data 2.6 module doesn't support Spring 5.

As workaround I access the data with a SqlQuery in a class Dao something like:

    SqlQuery<String, MyEntity> sql = new SqlQuery<>(MyEntity.class, SQL_SELECT);
    //You can set arguments
    //sql.setArgs(composante, typeValeur);
    return myEntityCache.query(sql).getAll().stream().map(Entry::getValue)
    .collect(Collectors.toList());
P.Rousseau
  • 70
  • 7
  • You are right and that's what i did and i solved my issue with that way but i would like just to specify that the there a conflict between IgniteRepository and CrudRepository witch the first one extends the seconde one and specialy between methodes: deleteAll(Iterable ids) Deletes all the entities for the provided ids. and deleteAll(Iterable extends T> entities) Deletes the given entities.I hope that issue will be fixed in next spring data version :) – Abder KRIMA Nov 16 '18 at 00:32