【问题标题】:Is it possible to query with list of objects using JPA like foreach tag?是否可以使用 JPA(如 foreach 标签)查询对象列表?
【发布时间】:2022-01-15 03:18:17
【问题描述】:

假设我有这样的查询:

查询对象

public class myObject {
    private String code;
    private String name;
}

查询方法

@Query(nativeQuery = true,value = "...")
findByAcodeAndBname(List<MyObject> queryObject);

查询的伪代码

 select a.code, b.name from tableA a 
  left join table b on a.column = b.column 
 where a.code = ${} b.name = ${}

由于仅使用 Java 中的 foreach 代码进行查询可能会导致性能问题,我如何使用本地 JPA 查询(如 mybatis foreach 标签)映射每对 a.code 和 b.name?或者有可能吗?

【问题讨论】:

    标签: java spring-boot jpa mybatis


    【解决方案1】:

    我认为这里不需要本地查询,因为从数据库中查询数据并通过网络传输数据的成本高于任何相关的 Java 操作。

    您可以使用 JPQL 查询来代替原生查询,例如

    @Query("select new com.tsypanov.domain.HasIdAndNameDto(e.id, e.name)" +
        " from ManyFieldsEntity e " +
        "where e.name = :name")
    List<HasIdAndName> findAllByNameUsingDto(@Param("name") String name);
    

    这里我们从 JPQL 查询中调用 DTO 的构造函数,传递来自我们实体的字段。 DTO 类必须有指定的构造函数:

    @RequiredArgsConstructor
    public class HasIdAndNameDto {
    
      private final Long id;
      private final String name;
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-27
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多