мои настройки:
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
Кто-нибудь знает, в чем причина этого? Я мог бы просто пропустить некоторые настройки.