Spring引导jpa使用联接映射中的多个键值进行选择



我有以下工作查询,它根据连接映射的键和值进行选择。

@Query("select e from Entity e join e.dataAttributes da where " +
        "(key(da) =:attrKey1 and :attrVal1 in (value(da)) )")
List<Entity> findByAttrributeValues(@Param("attrKey1") String attrKey1,
                                      @Param("attrVal1") String attrVal1);

我想根据2个键和2个值进行选择,但遇到了困难。以下可能非常天真的尝试没有结果:

 @Query("select e from Entity e join e.dataAttributes da where " +
        "(key(da) =:attrKey1 and :attrVal1 in (value(da)) ) and " +
        "(key(da) =:attrKey2 and :attrVal2 in (value(da)) )")
List<Entity> findByTwoAttrributeValues(@Param("attrKey1") String attrKey1,
                                      @Param("attrVal1") String attrVal1,
                                      @Param("attrKey2") String attrKey2,
                                      @Param("attrVal2") String attrVal2);

我是JPA的新手,任何指导都将不胜感激

所以我有这个解决方案:

@Query("select e from Entity e join e.dataAttributes da join e.dataAttributes da2 where " +
    "(key(da) =:attrKey1 and :attrVal1 in (value(da)) ) and " +
    "(key(da2) =:attrKey2 and :attrVal2 in (value(da2)) )")
List<Entity> findByTwoAttrributeValues(@Param("attrKey1") String attrKey1,
                                  @Param("attrVal1") String attrVal1,
                                  @Param("attrKey2") String attrKey2,
                                  @Param("attrVal2") String attrVal2);

我需要使用第二个标识符再次加入dataAttributes。现在工作如预期。可能不是最漂亮的。如果有更好的方法,请告诉我

最新更新