Hibernate возвращает null из getCurrentPrice во внешнем транзакционном классе.
Но новый вызов get by id возвращает продукт с нормальной текущей ценой.
Как это исправить?
Вот мой класс Product
@Table(name = "products")
public class Product {//...
@OneToMany(mappedBy = "product", fetch = FetchType.LAZY)
private Set<OrderItem> orderItems = new HashSet<>();}
И OrderItem
@Table(name = "orderItems")
public class OrderItem extends BaseModel {//...
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "productId")
private Product product;
@Column
private double currentPrice;
}
И DAO
@Repository
@Transactional
public class HibernateOrderDao {//...
public Serializable save(Order order) {
order.getReceiver().getOrdersToReceive().add(order);
order.getItems().forEach(item -> {
item.setOrder(order);
item.getProduct().getOrderItems().add(item);//todo improve by direct sql or...!
});
order.getAddresses().forEach(address -> address.getOrders().add(order));
return super.save(order);
}
Но во внешнем транзакционном методе getCurrentPrice возвращает нуль
private Double calculateItemsCost(final OrderItem item) {
return item.getProduct().getCurrentPrice()
* item.getQuantity();
}