【问题标题】:Spring Data findTop10- Ten queries instead of oneSpring Data findTop10- 十个查询而不是一个
【发布时间】:2017-11-13 15:56:06
【问题描述】:

我有这样的 Spring Data 方法:

List<RegionBasics> findTop10ByRegionMappingsActiveTrue();

我期望它会在一个查询中从 db 中找到前 10 条记录,但我在日志中看到的是(我没有粘贴整个日志以保持可读性,但这个选择查询被调用了 10 次):

选择 regionmapp0_.id 作为 id1_2_1_, regionmapp0_.is_active 作为 is_activ2_2_1_, regionmapp0_.region_basic_id 作为 region_b3_2_1_, regionbasi1_.id 作为 id1_1_0_, regionbasi1_.hotel_count 作为 hotel_co2_1_0_, regionbasi1_.name_long 作为 name_lon3_1_0_, regionbasi1_. type5_1_0_ from region_mappings regionmapp0_ left outer join region_basics regionbasi1_ on regionmapp0_.region_basic_id=regionbasi1_.id where regionmapp0_.region_basic_id=?

如何确保此方法只命中 db 一次(而不是 10 次)?

我的模特:

@Data
@NoArgsConstructor
@Entity
@Table(name = "region_basics")
public class RegionBasics {

    @Id
    Integer id;

    @Column
    String type;

    @Column
    String name;

    @Column(name = "name_long")
    String longName;

    @Column(name = "hotel_count")
    Integer hotelCount;

    @OneToOne(mappedBy="regionBasics")
    RegionMappings regionMappings;
}

【问题讨论】:

    标签: java sql performance spring-data


    【解决方案1】:

    我认为你应该加入获取 RegionMappings: 像这样:@Query("SELECT rb FROM RegionBasics r JOIN FETCH r.regionMappings rm WHERE rm.active=true") 带分页参数new PageRequest(0,10)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-11
      • 1970-01-01
      • 1970-01-01
      • 2019-12-27
      • 2016-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多