我正在使用JPA作为项目的持久化API。它包含一个实体,该实体具有一个Postgres jsonb
列,如下所示:
@Entity
@TypeDefs(value = [TypeDef(name = "jsonb", typeClass = JsonBinaryType::class)])
data class Post(
//... irrelevant columns
@Type("jsonb") @Column(columnDefinition = "jsonb") val postDefinitions: List<Map<String, Any>>
)
当从该实体获取所有数据时,这个方法完美地工作。但现在我不需要返回所有数据,而是一些字段,包括jsonb
。
这就是问题所在。我有这个投影对象,并且正在使用以下本机查询来检索数据,但不知何故,JPA无法映射它。
interface PostProjection {
val id: UUID
val postDefinitions: List<Map<String, Any>>
}
@Query("SELECT CAST(id AS VARCHAR) AS id, jsonb_array_elements(post_definitions) AS postDefinitions " +
"FROM post WHERE id = :postId", nativeQuery = true)
fun getPostDefinitionsById(val id: UUID): List<PostProjection>
它已经有了getters
和setters
。我尝试使用@TypeDefs
注释接口,使用@Type
注释列,并将其从interface
更改为data class
。
没有成功。找不到任何关于此的信息。我不想检索String
,然后将其映射到相应的数据类型。
有人经历过这个吗?
val postDefinitions: Any?
此外,提供出现错误的代码片段会更有帮助。 - Thanh Nhan