У меня есть User
Сущность, которая содержит это поле:
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "FAVORITE_TAGS", joinColumns = arrayOf(JoinColumn(name = "USER_ID")), inverseJoinColumns = arrayOf(JoinColumn(name = "TAG_ID")))
@BatchSize(size = 24)
val favoriteTags: MutableSet<Tag>? = null
И я определил следующее DTO:
data class UserProfileDto(
...
val favoriteTags: MutableSet<Tag>?,
...
): UserDto()
Наконец, это один из UserRepository
методы (динамическая проекция DTO):
fun <T: UserDto> findByUsername(username: String, type: Class<T>): T?
Проблема в том, что когда я звоню userRepository.findByUsername("username", UserProfileDto::class.java)
, я получаю следующее исключение:
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Unable to locate appropriate constructor on class [com.cillariodelsanto.socialnotes.entity.dto.UserProfileDto]. Expected arguments are:
java.lang.String, java.lang.String, java.lang.String, double, long, com.cillariodelsanto.socialnotes.entity.Tag, long, long, long, long [select new com.cillariodelsanto.socialnotes.entity.dto.UserProfileDto(generatedAlias0.username, generatedAlias0.name, generatedAlias0.userPicPath, generatedAlias0.averageScore, generatedAlias0.documentsRatingsCount, favoriteTags, generatedAlias0.documentsCount, generatedAlias0.favoriteDocumentsCount, generatedAlias0.followingCount, generatedAlias0.followersCount) from com.cillariodelsanto.socialnotes.entity.User as generatedAlias0 left join generatedAlias0.favoriteTags as favoriteTags where generatedAlias0.username=:param0]
Проблема заключается в MutableSet
(Я тоже пробовал с Collection
и Set
, но результат был тот же).Есть ли способ исправить это?
Я знаю, что использование интерфейсов вместо DTO решило бы проблему, но я хотел бы знать, возможно ли достичь того же результата, используя DTO.Большое спасибо.