我的实体加载速度超慢了怎么办?

我有以下实体:

@Entity @Table(name="\"Order\"") public class Order { @Id @SequenceGenerator(name="order_id_seq", sequenceName="order_id_seq", allocationSize=1) @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="order_id_seq") private long id; @OneToOne private Customer customerDetails; @OneToOne private ProductDetails productDetails; @OneToOne private TransportDetails transportDetails; @OneToOne private OtherDetails otherDetails; @OneToOne private OtherDetails otherDetails2; @OneToOne private OtherDetails3 otherDetails3; private LocalDateTime dateOrderPlaced; private LocalDateTime dateOrderPaid; private Float totalPrice; @Size(max = 1000) private String orderComment; } 

现在,每当我第一次运行此查询时,使用以下存储库:

 public interface OrderRepository extends CrudRepository { @Transactional @Modifying @Query("UPDATE Order o SET o.totalPrice = (:price) WHERE o.id= (:id)") void updateTotalPrice(@Param("id") Long id, @Param("price") Float price); @Override List findAll(); @Override Order save(@Valid Order order); } 

执行以下操作大约需要5秒钟:

 public List getOrders(){ return orderDtoMapper.fromDomain(orderRepository.findAll()); } 

哪里:

 public List fromDomain(List orders){ return orders .stream() .map(order -> fromDomain(order)) .collect(Collectors.toList()); } public OrderDto fromDomain(Order order){ OrderDto orderDto = new OrderDto(); orderDto.setTransportDetails(transportDetailsDtoMapper.fromDomain(order.getTransportDetails())); orderDto.setTotalPrice(order.getTotalPrice()); orderDto.setDateOrderPaid(order.getDateOrderPaid()); orderDto.setDateOrderPlaced(order.getDateOrderPlaced()); orderDto.setId(order.getId()); return orderDto; } 

注意

我桌上只有3个实体……

尝试在@OneToOne注释中添加"mappedBy"值。 Actualy,看起来你有点不对劲:

  @OneToOne private OtherDetails otherDetails; @OneToOne private OtherDetails otherDetails2; @OneToOne private OtherDetails3 otherDetails3; 

不知道为什么有两个类OtherDetails和一个类OtherDetails3,但看起来你应该这样做

 @OneToMany(...) List otherDetails 

而且,也许,你有太多的数据。 启用你的hibernate日志,并直接在你的sql(我理解的是oracle)服务器中执行查询。 可能是sql server没有足够的内存用于结果集,并且它执行写入磁盘操作。

我的问题是我在多个字段上使用@Convert注释,这减慢了整个过程。 例如:

 @Data @Entity @Table(name="\"Customer\"") public class Customer { @Id @SequenceGenerator(name="customer_id_seq", sequenceName="customer_id_seq", allocationSize=1) @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="customer_id_seq") private long id; private String firstName; @Convert(converter = LastNameEncryption.class) private String lastName; }