如何解决实体的 Spring Boot JPA 投影,Postgresql JSON 字段为 Map<Key, Value>
我使用带有 Kotlin 和 Postgresql 作为数据库的 Spring Boot。对于 JSON 字段,我使用 hibernate-types-52
:
dependencies {
...
implementation("com.vladmihalcea:hibernate-types-52:2.10.2")
...
}
@Entity
@Table(name = "addresses")
@TypeDefs(
TypeDef(name = "jsonb",typeClass = JsonBinaryType::class),TypeDef(name = "json",typeClass = JsonStringType::class),)
data class Address(
@Id
var id: Int? = null,@Type(type = "jsonb")
@Column(name = "street",columnDeFinition = "json",nullable = false)
var street: Map<Language,String>,@Column(name = "zip_code" nullable = false)
var zipCode: String,@Column(name = "created_at",nullable = false,updatable = false)
@CreationTimestamp
var createdAt: Date? = null,@Column(name = "updated_at",nullable = false)
@UpdateTimestamp
var updatedAt: Date? = null,}
对应的仓库是:
@Repository
interface AddressRepository : JpaRepository<Address,Int> {
fun findStreetByZipCode(zipCode: String): Addressstreetonly?
}
interface Addressstreetonly {
val id: Int
val street: Map<Language,String>
}
和 Language 是一个枚举 enum class Language { EN,RU,KZ,TJ }
问题是当我调用 findStreetByZipCode
时,底层 sql 语句在选择查询中具有所有字段:
select
address0_.id as id1_9_,address0_.created_at as created_2_9_,address0_.street as street3_9_,address0_.updated_at as updated4_9_,address0_.zip_code as zip_cod5_9_
from
addresses
where
address0_.zip_code = ?
但如果我将 Addressstreetonly 接口中的 val street: Map<Language,String>
类型更改为 val street: Any
,一切都会按预期进行:
select
address0_.id as col_0_0_,address0_.street as col_1_0_
from
addresses
where
address0_.zip_code = ?
我认为问题出在街道字段的类型上,即 Map 并且 Map 强制获取实体的所有字段。我该如何解决这个问题?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。