[英]Apache POI 4.0.1 super slow getting started … 15 minutes or more. What is wrong?
[英]What is wrong with my entity that it is loading super slow?
我有以下实体:
@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<Order, Long> {
@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<Order> findAll();
@Override
Order save(@Valid Order order);
}
执行以下操作大约需要 5 秒钟:
public List<OrderDto> getOrders(){
return orderDtoMapper.fromDomain(orderRepository.findAll());
}
在哪里:
public List<OrderDto> fromDomain(List<Order> 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"
值。 实际上,看起来你有什么问题:
@OneToOne
private OtherDetails otherDetails;
@OneToOne
private OtherDetails otherDetails2;
@OneToOne
private OtherDetails3 otherDetails3;
不知道为什么有两个类OtherDetails和一个类OtherDetails3,但看起来你应该这样做
@OneToMany(...)
List<OtherDetails> otherDetails
而且,可能是,你有太多的数据。 启用您的休眠日志,并直接在您的 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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.