我有以下实体:
@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());
}
Where:
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;
}
NOTE
我的表中只有 3 个实体...
尝试添加"mappedBy"
值在@OneToOne
注释。事实上,看起来你有问题:
@OneToOne
private OtherDetails otherDetails;
@OneToOne
private OtherDetails otherDetails2;
@OneToOne
private OtherDetails3 otherDetails3;
不知道为什么有两个类 OtherDetails 和一个类 OtherDetails3,但看起来你应该这样做
@OneToMany(...)
List<OtherDetails> otherDetails
而且,可能是您拥有太多数据。启用你的hibernate日志,并直接在你的sql(据我所知是oracle)服务器中执行查询。可能是sql server没有足够的内存用于结果集,并且它执行写入磁盘操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)