我有一个域对象,定义为:
@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
我如何调整表现?
答案 0 :(得分:0)
Hibernate默认提取大小为10,这导致了问题。 对于大型结果集,增加提取大小很重要,因此通过在查询级别更改提取大小,它会变得非常快。
@QueryHints(@javax.persistence.QueryHint(name = "org.hibernate.fetchSize", value = "1000"))
List<Domain> findByBusinessDate(LocalDateTime businessDate);
如果您想全局地将其添加到您的属性文件中:
hibernate.jdbc.fetch_size:1000