Search code examples
springoraclespring-webfluxspring-data-r2dbcr2dbc

Spring Reactive with Oracle ClassCastException


Hi trying springboot reactive using Oracle DB. i got this exception when i trying to save the User. anyone has any idea why? i verified that connection is established

val u = Users("123", "123", "123")
usersRepository.save(u).subscribe { it -> println(it.email) }

This is my Repository

@Repository
interface UsersRepository : ReactiveCrudRepository<Users, String> {
    
}

This is the Users class

@Table(name = "users")
class Users(user: String?, email: String?, pass: String?) {
    constructor() : this(null, null, null ) {

    }

    @Id
    @Column
    var username: String? = user

    @Column
    var email: String? = email

    @Column
    var password: String? = pass

    @Column
    var resetUuid: String? = null

    @Column
    var expiryDatetime: LocalDateTime? = null
}

the DDL

CREATE TABLE "USERS" 
   (    "USERNAME" VARCHAR2(255 CHAR) NOT NULL ENABLE, 
    "EMAIL" VARCHAR2(255 CHAR), 
    "EXPIRY_DATETIME" TIMESTAMP (6), 
    "PASSWORD" VARCHAR2(255 CHAR), 
    "RESET_UUID" VARCHAR2(255 CHAR), 
     PRIMARY KEY ("USERNAME"))

this the exception

reactor.core.Exceptions$ErrorCallbackNotImplemented: java.lang.ClassCastException: class java.lang.Long cannot be cast to class java.lang.Integer (java.lang.Long and java.lang.Integer are in module java.base of loader 'bootstrap')
Caused by: java.lang.ClassCastException: class java.lang.Long cannot be cast to class java.lang.Integer (java.lang.Long and java.lang.Integer are in module java.base of loader 'bootstrap')
    at java.base/java.util.stream.Collectors.lambda$summingInt$19(Collectors.java:681) ~[na:na]
    at reactor.core.publisher.MonoStreamCollector$StreamCollectorSubscriber.onNext(MonoStreamCollector.java:132) ~[reactor-core-3.4.22.jar:3.4.22]
    at reactor.core.publisher.FluxFlatMap$FlatMapMain.tryEmit(FluxFlatMap.java:543) ~[reactor-core-3.4.22.jar:3.4.22]
    at reactor.core.publisher.FluxFlatMap$FlatMapInner.onNext(FluxFlatMap.java:984) ~[reactor-core-3.4.22.jar:3.4.22]
    at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext(FluxPeek.java:200) ~[reactor-core-3.4.22.jar:3.4.22]
    at reactor.core.publisher.FluxConcatArray$ConcatArrayDelayErrorSubscriber.onNext(FluxConcatArray.java:364) ~[reactor-core-3.4.22.jar:3.4.22]
    
    

Solution

  • I found same error with oracle-r2dbc driver 1.0.0, this version has a bug oracle-r2dbc, if you use this driver - try previous version 0.4.0.