我有以下工作查询,它根据连接映射的键和值进行选择。
@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。现在工作如预期。可能不是最漂亮的。如果有更好的方法,请告诉我