AlexPopov
AlexPopov

Reputation: 87

InvalidDataAccessApiUsageException - Parameter value did not match expected type

I need to get all users with a specific role from a database. For this I need to use JPA.

All roles are stored in a special set:
UserAccount.kt

    @ManyToMany(cascade = [(CascadeType.MERGE)])
    @JoinTable(
        name = "user_authorities",
        joinColumns = [JoinColumn(name = "user_id", referencedColumnName = "id")],
        inverseJoinColumns = [JoinColumn(name = "authority_id", referencedColumnName = "id")]
    )
    var authoritySet: MutableSet<Authority> = hashSetOf()

I want to do it like this:
UserAccountService.kt

    override fun getAllUsersByAuthorityName(name: String): List<UserAccountDto> {
        return userAccountRepository.findUsersByAuthoritySet(mutableSetOf(authorityService.findAuthorityByAuthorityName(name))).map { it.toDto() }
    }

UserAccountRepository.kt

    @Query("select u from UserAccount u where u.authoritySet = ?1")
    fun findUserAccountByAuthoritySet(authoritySet: MutableSet<Authority>): List<UserAccount>

But when calling these methods in tests, it gives an error:

Parameter value [Authority(id=1, authority='ROLE_ADMIN')] did not match expected type [java.util.Set (n/a)]; nested exception is java.lang.IllegalArgumentException: Parameter value [Authority(id=1, authority='ROLE_ADMIN')] did not match expected type [java.util.Set (n/a)]

Tell me how you can properly organize the search for users? Can you show sites with examples of such requests?

Upvotes: 1

Views: 764

Answers (1)

AlexPopov
AlexPopov

Reputation: 87

First, I started using the JPA functionality and added the "In" particle to the method name in the repository. In the second, I removed the @Query annotation Third, I revisited my tests, and it turned out that I added roles after the saved users, and therefore my changes were not committed to the database. I fixed it.

Problem solved

Upvotes: 1

Related Questions