【发布时间】:2022-01-18 18:15:01
【问题描述】:
我目前在 API 请求正文中收到 Map<String, String>。我有一个实体,
class TagEntity {
@Column(name = "name", length = 128, nullable = false)
private String name;
@Column(name = "value", length = 256, nullable = false)
private String value;
}
有一个MachineEntity 有一个Set<TagEntity>。这是一个@OneToMany 映射。我正在尝试根据HashMap(请求中)传递的name和value获取机器实体,它们对应于TagEntity。
我在下面尝试了这段代码。但是,只有当我在请求中传递一个名称-值对时它才有效。假设,如果HashMap 包含 2 个元素,则查询在应该返回 2 个机器实体时返回一个空列表。
SetJoin<MachineEntity, TagEntity> join = root.join(MachineEntity_.tagEntities);
for (Map.Entry element : request.getTags().entrySet()) {
predicates.add(criteriaBuilder.and(
criteriaBuilder.equal(join.get(TagEntity_.name), element.getKey()),
criteriaBuilder.equal(join.get(TagEntity_.value), element.getValue())
));
}
有没有办法可以在CriteriaBuilder 中设置HashMap 而无需遍历Map?我不知道可以做些什么来解决这个问题。非常感谢一些帮助。
【问题讨论】:
标签: jpa hashmap filtering predicate criteria-api