I'm working with spring-boot 2.3.5.RELEASE and vavr 0.10.3 and I have this error when I try to invoke the method disableEnabledCredentials() defined in this way:

public interface ICredentialDAO extends Repository<Credential, String> {

    @Modifying
    @Query("update Credential d set d.enabled = false where d.enabled = true")
    Try<Integer> disableEnabledCredentials();

    Option<Credential> findByEnabled(boolean enabled);

    Try<Credential> save(Credential credential);

}

Error: "Modifying queries can only use void or int/Integer as return type!"; nested exception is java.lang.IllegalArgumentException: Modifying queries can only use void or int/Integer as return type!

I know that vavr is supported by spring-data-jpa because I has using this features in other methods as findByEnabled() or save().

The support by vavr should't include @Modifying allowing return of Try or Try?

My pom includes:

<properties>
    <spring-boot-dependencies.version>2.3.5.RELEASE</spring-boot-dependencies.version>
</properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot-dependencies.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>io.vavr</groupId>
            <artifactId>vavr</artifactId>
            <version>0.10.3</version>
        </dependency>

Comment From: bclozel

Spring Framework provides some support around Vavr's Try (see #20361) but the problem you're seeing is probably related to Spring Data Commons' support. This was added in DATACMNS-983, but I haven't found any mention of @Modifying nor know enough about this subject to help here.

Could you create a new issue in the Spring Data Commons project please?

Thanks!

Comment From: jbochard

JIRA created: DATACMNS-1840