Я хочу сравнить два списка, являются ли они подмножеством друг друга.Я хочу сделать это с org.springframework.data.jpa.repository.Query
, но у меня есть следующее исключение: java.lang.IllegalArgumentException: Parameter value [ADMIN] did not match expected type [java.util.Collection (n/a)]
Мой запрос выглядит так:
@Query("SELECT u FROM User u WHERE u.roles in :roles ")
fun findByRoles(pageable: Pageable, roles: Set<Role>): Page<User>
Вот мои классы сущностей: @ Entity
class User(
var name: String,
@Column(nullable = false, columnDefinition = "enum('ADMIN','USER')")
@ElementCollection(targetClass = Role::class, fetch = FetchType.EAGER)
@Enumerated(EnumType.STRING)
var roles: List<Role>,
@Id
@SequenceGenerator(name = "user_id_seq", sequenceName = "user_id_seq", initialValue = 1, allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_id_seq")
var id: Long? = null
)
enum class Role { ADMIN, USER }
И я положил [USER, ADMIN]
в свой набор.
Есть идеи?
Обновление:
Когда я изменяю сущности, оно работает.Я изменил сущность Роль на класс с enum.
@Entity
@Table(name = "cegportal_user")
class User(
@Column(unique = true, nullable = false) var kauId: String,
var name: String,
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "user_role",
joinColumns = [JoinColumn(name = "user_id")],
inverseJoinColumns = [JoinColumn(name = "role_id")])
var roles: Set<Role>,
@Id
@SequenceGenerator(name = "cegportal_user_id_seq", sequenceName = "cegportal_user_id_seq", initialValue = 1, allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "cegportal_user_id_seq")
var id: Long? = null
)
@Entity
class Role(
@Column(unique = true, nullable = false)
var name: String,
@Id
@SequenceGenerator(name = "role_id_seq", sequenceName = "role_id_seq", initialValue = 1, allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "role_id_seq")
var id: Long? = null
)