创建谓词以将实体与Map属性中的条目相匹配



我正在尝试创建一个javax.persistence.criteria.Predicate,以匹配在Map<String,String>属性中包含某个键/值条目的实体。这是在Spring Data JPA和JpaSpecificationExecutor<MyEntity>存储库的上下文中进行的。

class MyEntity {
@ElementCollection(fetch = FetchType.EAGER)
...
Map<String, String> metadata = new HashMap<>();
}
static Specification<MyEntity> hasMetadata(String name, String value) {
return (entity, criteriaQuery, criteriaBuilder) -> {
Path<Map<String,String>> metadata = entity.get("metadata");
// fixme: insert magic
//
// not quite right: cb.isMember(cb.literal(value), metadata) 
return ...
};
}

有一个稍微相关的问题CriteriaBuilder和实体(Hibernate(列表的isMember,但我还没能从那里收集到太多信息。

一个解决方案会很好,但也有一个指向文档的指针,其中也指定了这一点。我的谷歌傅让我失望了。

我在这里发现了一个非常相似的问题jpa criteriabuilder join maps,它提供了一些现在似乎可以工作的东西

static Specification<MyEntity> hasMetadata(String name, String value) {
return (entity, criteriaQuery, criteriaBuilder) -> {
MapJoin<MyEntity, String, String> join = entity.joinMap("metadata");
return criteriaBuilder.and(
criteriaBuilder.equal(join.key(), name),
criteriaBuilder.equal(join.value(), value)
);
};
}

相关内容

  • 没有找到相关文章

最新更新