Spring boot jpa选择使用联接映射中的多个键值

时间:2016-04-12 16:29:37

标签: spring hibernate jpa spring-boot

我有以下工作查询,它​​根据联接地图的键和值进行选择。

@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的新手,任何指导都将不胜感激

1 个答案:

答案 0 :(得分:4)

所以我有这个解决方案:

@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。按预期工作。可能不是最漂亮的。如果有更好的方式让我知道