Spring Data DTO Projection с полем @ManyToMany - PullRequest
0 голосов
/ 14 мая 2018

У меня есть 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.Большое спасибо.

...