SpringQoot nativeQuery и Projection возвращаются с помощью AbstractJpaQuery - PullRequest
0 голосов
/ 25 апреля 2020

мои настройки:

postgresql, ver 12.2
spring boot, ver: 2.2.6.RELEASE
kotlin, ver: 1.3.71

У меня есть указанный ниже репозиторий, и я хотел бы получить обратно список TypeIdNames, но он всегда возвращается со списком org.springframework.data.jpa.repository.query.AbstractJpaQuery$TupleConverter$TupleBackedMap@524185c7

interface TypeIdRepository : CrudRepository<TypeId, Int> {
    @Query("select id, name from type_id")
    fun getAllNames(): List<TypeIdName>
}

TypeId:

@Entity(name = "type_id")
@TypeDef(name = "jsonb", typeClass = JsonBinaryType::class)
data class TypeId(@Id val id: Int,
                  val name: String?,
                  @Type(type = "jsonb") @Column(columnDefinition = "jsonb") val payload: TypeIdStatic)

TypeIdName:

interface TypeIdName {
    fun getId(): Int
    fun getName(): String
}

sql для создания таблицы:

create table type_id (
    id      int primary key,
    name    text,
    payload jsonb
);

Как видите, полезная нагрузка имеет тип jsonb , Я также попытался получить только идентификатор, чтобы имя никому не мешало, но я столкнулся с той же проблемой.

Теперь я увидел несколько примеров создания нового экземпляра класса (как только я изменил его с интерфейс) в запросе:

interface TypeIdRepository : CrudRepository<TypeId, Int> {
    @Query("select new model.database.TypeIdName(id, name) from type_id")
    fun getAllNames(): List<TypeIdName>
}

Это сработало, но я не могу использовать его, так как мне нужно использовать nativeQuery. «Окончательный» запрос / репозиторий будет выглядеть примерно так (я хочу полностью удалить столбец name из таблицы type_id, чтобы его можно было извлечь из payload):

interface TypeIdRepository : CrudRepository<TypeId, Int> {
    @Query("select id, payload -> 'name' ->> 'en' as name from type_id where payload -> 'name' ->> 'en' is not null", nativeQuery = true)
    fun getAllNames(): List<TypeIdName>
}

Но снова когда я запускаю его, он возвращается со списком AbstractJpaQuery

Кто-нибудь знает, в чем причина этого? Я мог бы просто пропустить некоторые настройки.

...