微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SpringData JPA:使用实体集合作为参数进行查询

如何解决SpringData JPA:使用实体集合作为参数进行查询

我有一个要在其上执行更新的实体的列表,我知道我可以使用String / Integer ..等列表作为参数来更新表,例如

  @Query("update tableName i set i.isUpdated = true where i.id in :ids")
  void markAsUpdated(@Param("ids") List<Integer> itemIds);

我试图避免将实体列表重复转换为ID列表,以便在DB中进行查询。我知道有deletealldeleteInBatch条命令接受参数作为实体列表。

如何在JPA Query中执行此操作,我尝试了以下操作,但尚未成功。

  @Modifying(flushAutomatically = true,clearautomatically = true)
  @Query("update tableName i set i.updated = true where i in :items")
  void markAsUpdated(@Param("items") List<Item> items)

解决方法

查询需要ID,它不知道如何处理实体。

您有多种选择:

  • 只需将id传递给方法,客户端负责提取id。
  • 传递实体并使用SpEL提取ID
  • 如注释中所建议,请使用默认方法来提供这两个API并相互委托。

关于注释中出现的问题:您可以通过使相关实体实现类似于此接口的方法,将提取id的方法移动到单个方法中:

interface WithId {
    Long getId();
}

或通过将lambda传递给该方法,对单个实体进行转换:

List<ID> extractIds(List<E> entities,Function<E,ID> extractor) {
    // ...
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。