首页 > 解决方案 > JPQL 如何通过 KEY 名称或 VALUE 搜索 JSON Map

问题描述

假设我有下一个实体,受让人是 Map<String, Object>

@Getter
@Setter
@Entity(name = "Permission")
public class Permission {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    // It's an enum of whatever values like (TEAM, USER, ..etc)
    private PermissionType type;

    @Type(type = "jsonb")
    @Column(name = "assignee", columnDefinition = "jsonb", nullable = false)
    private Map<String, Object> assignee;

}

如何使用 JPQL 通过受让人键或值搜索或选择权限?

那可能吗?

标签: hibernatejpqlcriteria

解决方案


您将需要一个特殊的 SQLFunction 实现,然后您可以从 JPQL 调用它。Blaze-Persistence是一个在 JPA 之上运行的流畅查询构建器库,提供了适用于各种数据库的开箱即用的功能:https ://persistence.blazebit.com/documentation/1.6/core/manual/en_US/# json_get

用法如下所示:

FROM Permission p WHERE JSON_GET(p.assignee, 'jsonKey') = 'someValue'


推荐阅读