Hibernate JPQL如何通过键名或键值在JSON映射上搜索

Hibernate JPQL如何通过键名或键值在JSON映射上搜索,hibernate,jpql,criteria,Hibernate,Jpql,Criteria,假设我有下一个实体,并且受让人是一个映射 @Getter @塞特 @实体(name=“权限”) 公共类许可{ @身份证 @GeneratedValue(策略=GenerationType.IDENTITY) 私人长id; //它是任何值(团队、用户等)的枚举 私人许可类型; @类型(Type=“jsonb”) @列(name=“assignee”,columnDefinition=“jsonb”,nullable=false) 私人地图受让人; } 如何使用JPQL按受让人密钥或值搜索或选择权

假设我有下一个实体,并且受让人是一个映射

@Getter
@塞特
@实体(name=“权限”)
公共类许可{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
//它是任何值(团队、用户等)的枚举
私人许可类型;
@类型(Type=“jsonb”)
@列(name=“assignee”,columnDefinition=“jsonb”,nullable=false)
私人地图受让人;
}
如何使用JPQL按受让人密钥或值搜索或选择权限


这可能吗?

您需要一个特殊的SQLFunction实现,然后可以从JPQL调用它,在JPA之上运行的fluent query builder库提供了适用于各种数据库的现成功能:

用法如下所示:

来自权限p,其中JSON_获取(p.appendent,'jsonKey')='someValue'

@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;

}