Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA查询:选择至少有一个给定映射的entryset对的元素_Java_Hibernate_Jpa_Jpql - Fatal编程技术网

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