Spring Data Jpa查询结果集到对象创建非常慢

时间:2018-03-30 09:43:53

标签: java hibernate spring-data spring-data-jpa

我有一个域对象,定义为:

@AllArgsConstructor
@NoArgsConstructor
@ToString
@Getter
@Setter
@Entity
@Table(name = "t_domin")
@Builder
public class Domain {

  @Column(name = "BUSINESS_DATE")
  private LocalDateTime businessDate;

  @Column(name = "DATA_PROVIDER")
  @Enumerated(EnumType.STRING)
  private DataProvider dataProvider;

}

对于上面的域对象我是Spring Repository:

@Repository
public interface DomainRepository extends JpaRepository<Domain, UUID> {

  List<Domain> findByBusinessDate(LocalDateTime businessDate);
}

当我查询时: repository.findByBusinessDate(someDate) - &gt;我在一分多钟内得到1000条记录,如果我在db(oracle)上运行同样的查询,我会在一秒内得到结果集。

我打开了日志(TRACE),我发现它花了更多时间将结果集提取到java对象列表中:

TRACE o.h.type.descriptor.sql.BasicExtractor

我如何调整表现?

1 个答案:

答案 0 :(得分:0)

Hibernate默认提取大小为10,这导致了问题。 对于大型结果集,增加提取大小很重要,因此通过在查询级别更改提取大小,它会变得非常快。

@QueryHints(@javax.persistence.QueryHint(name = "org.hibernate.fetchSize", value = "1000"))
List<Domain> findByBusinessDate(LocalDateTime businessDate);

如果您想全局地将其添加到您的属性文件中:

hibernate.jdbc.fetch_size:1000