简体   繁体   English

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

[英]Spring Data Jpa query resultset to object creation is very slow

I have a domain object,defined as : 我有一个域对象,定义为:

@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;

}

For the above domain Object I've Spring Repository: 对于上述域对象,我拥有Spring Repository:

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

  List<Domain> findByBusinessDate(LocalDateTime businessDate);
}

when I'm querying : repository.findByBusinessDate(someDate) --> I get 1000 records in more than a minute,where as same query if I run on db(oracle) I get the result-set within a sec. 当我查询时:repository.findByBusinessDate(someDate)->一分钟以上,我得到了1000条记录,而如果我在db(oracle)上运行,则得到相同的查询结果,在一秒钟之内。

I turned on the log (TRACE) ,I see that its taking more time in extracting the result set into list of java object: 我打开了日志(TRACE),我发现将结果集提取到java对象列表中需要花费更多时间:

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

How can i tune the performance ? 如何调整性能?

Hibernate default fetch size is 10 ,which was causing the issue . Hibernate的默认访存大小为10,这是导致此问题的原因。 For large result sets, it's important to increase the fetch size,so by changing the fetch size at query level its become really faster. 对于大型结果集,重要的是要增加获取大小,因此通过在查询级别更改获取大小,它的速度实际上会更快。

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

If you want it globally add this in your property file: 如果要全局全局添加,请在属性文件中添加:

hibernate.jdbc.fetch_size:1000

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM