Java JPA查询:选择至少有一个给定映射的entryset对的元素
我有一个实体:Java JPA查询:选择至少有一个给定映射的entryset对的元素,java,hibernate,jpa,jpql,Java,Hibernate,Jpa,Jpql,我有一个实体: @Entity class A { @Id @Column private Long id; @ElementCollection @MapKeyColumn(name="key") @Column(name="value") @CollectionTable(name="key_value_pairs", joinColumns=@JoinColumn(name="a_id")) private Map<String,
@Entity
class A {
@Id
@Column
private Long id;
@ElementCollection
@MapKeyColumn(name="key")
@Column(name="value")
@CollectionTable(name="key_value_pairs", joinColumns=@JoinColumn(name="a_id"))
private Map<String, String> metadata;
}
@实体
甲级{
@身份证
@纵队
私人长id;
@元素集合
@MapKeyColumn(name=“key”)
@列(name=“value”)
@CollectionTable(name=“key\u value\u pairs”,joinColumns=@JoinColumn(name=“a\u id”))
私有地图元数据;
}
。。。我有一个假设:
public interface ARepository extends JpaRepository<A, Long> {
@Query("...")
Page<A> getAllAsThatHaveAtleastOneEntrysetPairOfGivenMapInMetadataMap(Map<String, String> mapToCompareAgainst, Pageable pageable);
}
公共接口存储扩展了JPA存储:
@Query(“从其中选择一个(KEY(a.metadata)=:KEY和:value in(value(a.metadata)))”)
Page GetAllastHatHaveAtlastoneGivenPairinMetadataMap(@Param(“key”)字符串键,@Param(“value”)字符串值,可分页;
因此,我可以在maps入口集上循环执行这些查询并连接结果,但这样我就无法控制分页和重复,所以我仍然处于第一步
编辑2
实际上,即使是这种“针对一对进行检查”的查询也不起作用。它实际做的是返回具有指定键的所有元素,但仅当指定值存在于映射中时(但不一定必须是指定键对)。所以还是第一步
编辑3
我得到了一个键-值对匹配查询,随着需求的变化,这就足够了。知道如何解决最初的问题还是不错的。一个键值对解决方案:
@Query("select a from A a JOIN a.metadata md where KEY(md) = :key and :value = md")
Page<A> getAllAsThatHaveAtleastOneGivenPairInMetadataMap(@Param("key") String key, @Param("value") String value, Pageable pageable);
@Query(“从JOIN a.md中选择一个,其中KEY(md)=:KEY和:value=md”)
Page GetAllastHatHaveAtlastoneGivenPairinMetadataMap(@Param(“key”)字符串键,@Param(“value”)字符串值,可分页;
@Query("select a from A a JOIN a.metadata md where KEY(md) = :key and :value = md")
Page<A> getAllAsThatHaveAtleastOneGivenPairInMetadataMap(@Param("key") String key, @Param("value") String value, Pageable pageable);